【发布时间】:2014-07-29 16:51:16
【问题描述】:
我有一个 web api 项目,我可以在本地运行它,但是当我将 dll 发布到网站中的 bin 文件夹时,并没有采用路由配置。我一直无法修改或替换全局 asax,因为它有自己的实现。哪里是设置 mi web api 路由配置的最佳位置,我该如何使用 httpmodule?
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
更新:
我添加了一个httpmodule,并没有映射路由,正在发送http 404:
public void Init(HttpApplication context) {
try
{
AreaRegistration.RegisterAllAreas();
var routes = RouteTable.Routes;
// Controllers with Actions
// To handle routes like '/api/controller/route'
routes.MapHttpRoute(
name: "ControllerActionAndId",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new { id = @"^\d+$" }
);
// Controllers with Actions
// To handle routes like '/api/controller/route'
routes.MapHttpRoute(
name: "ControllerAndAction",
routeTemplate: "api/{controller}/{action}"
);
// Controller with ID
// To handle routes like '/api/controller/1'
routes.MapHttpRoute(
name: "ControllerAndId",
routeTemplate: "api/{controller}/{id}",
defaults: null,
constraints: new { id = @"^\d+$" } // Only integers
);
// Controller Only
// To handle routes like '/api/controller'
routes.MapHttpRoute(
name: "ControllerOnly",
routeTemplate: "api/{controller}"
);
}
catch { }
}
【问题讨论】:
-
为什么是 try/catch?如果它给你一个例外,因为已经设置了路由已经尝试了 routes.Clear()
-
在 prod 环境中正在删除所有路由,我无法使路由在本地/prod 中都不起作用
标签: asp.net asp.net-mvc asp.net-mvc-4 global-asax