C# API突然停止工作,使用常规web路由
我正在处理一个asp.net项目,突然,似乎出乎意料地,API停止了专门针对使用C# API突然停止工作,使用常规web路由,c#,asp.net,asp.net-mvc,routing,C#,Asp.net,Asp.net Mvc,Routing,我正在处理一个asp.net项目,突然,似乎出乎意料地,API停止了专门针对使用/API/{controller}/{id}路由的路由的工作 例如,使用/api/Events?param1=x¶m2=y可以正常工作。只是在使用可选参数{id}时,它似乎回到了常规web路由:/{controller}/{action}/{id} 以下是相关配置: WebApiConfig.cs: public static void Register(HttpConfiguration confi
/API/{controller}/{id}
路由的路由的工作
例如,使用/api/Events?param1=x¶m2=y
可以正常工作。只是在使用可选参数{id}
时,它似乎回到了常规web路由:/{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 }
);
}
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 }
);
}
RouteConfig.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 }
);
}
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();
}
}
}
//GET:api/Events/5
[HttpGet]
要获取的公共事件readd(int-id)
{
使用(var session=DBSessionFactory.OpenSession())
{
使用(ITransaction transaction=session.BeginTransaction())
{
返回会话。查询()
.其中(e=>e.Id==Id)
托利斯先生()
.Select(x=>Mapper.Map(x))
.FirstOrDefault();
}
}
}
这对于任何使用Telerik Reporting的人来说都是值得的
telerik reporting“wizard”放置在Global.asax
中的行似乎会导致注册一条与ASP.NET MVC API创建的默认路由冲突的路由
令人不快的是:
Telerik.Reporting.Services.WebApi.ReportsControllerConfiguration.RegisterRoutes(System.Web.Http.GlobalConfiguration.Configuration);
为了解决我的问题,我将线路从Global.asax
的顶部移动到最后一次线路配置之后:
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();
}
这就解决了问题