【问题标题】:add web api route to exists web site cannot modify global asax将 web api 路由添加到现有网站无法修改全局 asax
【发布时间】: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


【解决方案1】:

如果你不能改变全局assax,你能改变webconfig吗?

使用 httpmodule 你会得到类似的东西

  <system.webserver>
       <modules>
           <add name="WebApiStartModule" type="myproject.WebApiStartModule, assembly"/>
        </modules>
  <system.webserver>


  public class WebApiStartModule : IHttpModule
  {

       public void Init(HttpApplicationContext) {

             var routes = RouteTable.Routes

             routes.Clear()
             //initialize routing here
       }
  }

【讨论】:

  • 我在init方法中添加了WebApiConfig.Register(GlobalConfiguration.Configuration);但是它输入了2次并且该路由存在于集合路由中的异常
  • 当然使用 webapiconfig.register 是最简单的方法,在这种情况下你不会想使用 httpmodule。
猜你喜欢
  • 1970-01-01
  • 2014-04-21
  • 2017-10-01
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
相关资源
最近更新 更多