API突然停止工作,使用常规Web路由

时间:2017-03-01 13:12:46

标签: c# asp.net asp.net-mvc routing

我正在开发一个asp.net项目,突然间,似乎突然之间,API已经停止专门用于使用/api/{controller}/{id}路由的路由。

使用,例如/api/Events?param1=x&param2=y工作正常。只是在使用可选参数{id}时,它似乎又回归到常规网络路线:/{controller}/{action}/{id}

以下是相关配置:

WebApiConfig.cs:

    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

        config.Formatters.JsonFormatter.SupportedMediaTypes
            .Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/html"));

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }

RouteConfig.cs:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }

和Global.asax:

    protected void Application_Start()
    {
        Telerik.Reporting.Services.WebApi.ReportsControllerConfiguration.RegisterRoutes(System.Web.Http.GlobalConfiguration.Configuration);
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AutoMapperConfig.RegisterMaps();
    }

其中一项不起作用的示例:

    // GET: api/Events/5
    [HttpGet]
    public EventReadDTO Get(int id)
    {
        using (var session = DBSessionFactory.OpenSession())
        {
            using (ITransaction transaction = session.BeginTransaction())
            {
                return session.Query<Event>()
                    .Where(e => e.Id == id)
                    .ToList()
                    .Select(x => Mapper.Map<EventReadDTO>(x))
                    .FirstOrDefault();
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

对于使用Telerik报告的任何人来说,这都是值得的。

由telerik报告“向导”放置在Global.asax中的行似乎会导致注册的路由干扰ASP.NET MVC API创建的默认路由。

违规行是:

Telerik.Reporting.Services.WebApi.ReportsControllerConfiguration.RegisterRoutes(System.Web.Http.GlobalConfiguration.Configuration);

为了解决我的问题,我将行从Global.asax top 移到最后一次路由配置之后:

    protected void Application_Start()
    {            
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        Telerik.Reporting.Services.WebApi.ReportsControllerConfiguration.RegisterRoutes(System.Web.Http.GlobalConfiguration.Configuration);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AutoMapperConfig.RegisterMaps();
    }

这解决了这个问题!