问题
I'm working on a ASP.NET MVC 4 website. Together with MVC controllers, I have one API controller which contains an ajax GET API interface. It works perfectly when debugged locally with visual studio.
However, after I deployed it as an Azure Website, MVC controllers work, but the API controller doesn't work anymore. When jQuery code tries to reach it, it returns a response like:
No HTTP resource was found that matches the request URI 'http://example.com'.
It looks like at least the route works (otherwise, another 404 response body is returned.).
Additionally, I have another pure MVC 4 Web API service deployed as an Azure Cloud Service. It works perfectly. Thus, I wonder what causes the API inside MVC Website to fail? Thank you!
回答1:
Check for these things they usually help:
- Make sure your controller type is public and derives from ApiController
- Make sure the controller is named 'xxxxController' where xxxx is the controller name
In that case, the URL api/xxxx should work.
回答2:
It is a common problem When an MVC application is deployed on IIS, the HTTP url which is calling the REST Service exposed by your web API will change. If your api controller is named MyApiController, so in production evironment, you should add the application name before the calling URL. That means that /api/MyApi will become /MyApp/api/MyApi. MyApp is the prefix of your web site (yourwebsite/MyApp).
回答3:
I solved the issue.
I use Telerik DataAccess as my ORM, and the project should have Copy Local
to True.
Likewise, add all references as a Copy Local=True if they seem to be 3rd party dlls or from nuget.
You can find error more easily by adding <customErrors mode="Off" />
inside of <system.web>
in Web.config file.
来源:https://stackoverflow.com/questions/13418344/web-api-interface-works-locally-but-gets-404-after-deployed-to-azure-website