aci*_*ido 3 elmah asp.net-web-api asp.net-web-api-routing asp.net-web-api2
我正试图在我的broswer中访问/elmah.axd,但它返回:
{"message":"No HTTP resource was found that matches the request URI 'http://services.domain.com/elmah.axd'."}
Run Code Online (Sandbox Code Playgroud)
服务器是本地的(127.0.0.1),即使在那,我有我的web.config Elmah设置以这种方式保护它:
<elmah>
<security allowRemoteAccess="true" />
</elmah>
Run Code Online (Sandbox Code Playgroud)
我的WebApiConfig看起来像:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Locally only you will be able to see the exception errors
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.LocalOnly;
// Web API routes
config.Routes.IgnoreRoute("elmah", "elmah.axd");
config.Routes.IgnoreRoute("allemah", "elmah.axd/{*pathInfo}");
config.Routes.IgnoreRoute("elmahgeneric", "{resource}.axd/{*everything}");
config.MapHttpAttributeRoutes();
var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
// Remove the XML formatter
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
Run Code Online (Sandbox Code Playgroud)
我甚至试图从3种组合中的任何一种中忽略一条路线而没有运气.
最后我的global.asax看起来像这样:
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
Run Code Online (Sandbox Code Playgroud)
任何我可能遗失的暗示或想法都会很好.
在此先感谢,非常感谢您的时间.
aci*_*ido 10
我终于做到了.
通过添加到WebApiConfig.cs文件
config.Routes.MapHttpRoute("AXD", "{resource}.axd/{*pathInfo}", null, null, new StopRoutingHandler());
Run Code Online (Sandbox Code Playgroud)
WebApiConfig.cs文件的整个代码如下所示:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Locally only you will be able to see the exception errors
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.LocalOnly;
// Web API routes
config.MapHttpAttributeRoutes();
var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
// Remove the XML formatter
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.Routes.MapHttpRoute("AXD", "{resource}.axd/{*pathInfo}", null, null, new StopRoutingHandler());
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Run Code Online (Sandbox Code Playgroud)
最后的更改是将它添加到application_start方法下的global.asax中
RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}");
Run Code Online (Sandbox Code Playgroud)
特别感谢所有帮助我解决这个问题的人.
当我在 application_start 方法下的 global.asax 中添加以下内容时:
RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}");
Run Code Online (Sandbox Code Playgroud)
直到我把它放在上面它才起作用......
GlobalConfiguration.Configure(WebApiConfig.Register);
Run Code Online (Sandbox Code Playgroud)
添加到 Routes 属性的路由顺序很重要,因为应用程序使用集合中与 URL 匹配的第一个路由。
https://msdn.microsoft.com/en-us/library/system.web.routing.routetable.routes(v=vs.110).aspx
| 归档时间: |
|
| 查看次数: |
1747 次 |
| 最近记录: |