【发布时间】:2016-10-18 23:53:37
【问题描述】:
我已将 Web API 功能添加到 ASP.NET MVC 应用程序并希望使用属性路由。在 Visual Studio 2015 中运行该站点时,我可以在浏览器地址栏中输入 URL 并让我的控制器上的方法工作。将站点移至 IIS 后,我得到的只是 404 响应。我尝试了很多代码更改,但都没有成功。
BuilderApiController 文件位于 WebAPI/v1/Controllers 文件夹中。控制器上的属性会在这里找到吗?
namespace Hds.Edsi.WebAPI.V1.Controllers
{
[System.Web.Http.RoutePrefix("api/v1/builder")]
public class BuilderApiController : BaseApiController
{
[System.Web.Http.Route("GetExternalOrganizationID/{envisionOrgID}")]
[System.Web.Http.HttpGet]
public HttpResponseMessage GetExternalOrganizationID(string envisionOrgID)
{
WebApiConfig.cs 文件。标准的东西。如果我使用属性路由,我需要config.Routes.MapHttpRoute 部分吗?我试过有无。
如果我需要,config.MapHttpAttributeRoutes() 的目的是什么?当我在调用 Register 后查看GlobalConfiguration,Configuration._routes 时,没有任何属性路由定义的路由存在。他们应该是吗?
namespace Hds.Edsi.WebAPI
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
/*
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/v1/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
*/
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter());
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
Components.Automapper.CreateMaps();
// Requrired for managing AppDomain teardown - IRegisteredObject
MonitorManager.RegisterInstance();
}
IIS Express:
http://localhost:8181/api/v1/builder/GetExternalOrganizationID/123.123.123.123.1234 如我所料返回一个 JSON 对象。
IIS:
http://my server/api/v1/builder/GetExternalOrganizationID/123.123.123.123.1234 返回 404
我猜我在这里遗漏了一些简单的东西,或者不明白属性路由的工作原理。
已添加
这是来自 web.config 的 system.webServer 部分:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
</handlers>
</system.webServer>
【问题讨论】:
标签: asp.net-web-api