Elmah.axd WebAPI 2.2 - 未找到 HTTP 资源
Elmah.axd on WebAPI 2.2 - No HTTP Resource was found
我试图在我的浏览器中访问 /elmah.axd,但是 returns:
{"message":"No HTTP resource was found that matches the request URI 'http://services.domain.com/elmah.axd'."}
服务器是本地的 (127.0.0.1),甚至我有我的 web.config Elmah 设置来保护它:
<elmah>
<security allowRemoteAccess="true" />
</elmah>
我的 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 }
);
}
我什至试过一次只忽略 3 种组合中的任何一种路线,但没有成功。
最后我的 global.asax 看起来像这样:
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
任何关于我可能遗漏的提示或想法都会很好。
在此先致谢,非常感谢您花时间研究这个问题。
最有可能的问题是缺少生成错误页面的处理程序。
确保在您的 web.config
文件中配置了以下处理程序:
<system.web>
...
<httpHandlers>
...
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<system.webServer>
...
<handlers>
...
<add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</handlers>
有了这些设置,您应该能够访问 elmah.axd
并按预期保护它。
您可以在此处获取从新项目更新的示例配置文件作为示例:https://brutaldev.com/download/30987439.zip
我终于成功了
通过添加到 WebApiConfig.cs 文件
config.Routes.MapHttpRoute("AXD", "{resource}.axd/{*pathInfo}", null, null, new StopRoutingHandler());
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 }
);
}
}
最后的更改是将其添加到 application_start 方法下的 global.asax
RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}");
特别感谢所有帮助我解决这个问题的人。
我加
config.Routes.IgnoreRoute("axd", "{resource}.axd/{*pathInfo}");
到WebApiConfig
就够了。
当我在 application_start 方法下的 global.asax 中添加以下内容时:
RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}");
直到我把它放在上面才起作用...
GlobalConfiguration.Configure(WebApiConfig.Register);
您添加到路由 属性 的路由顺序很重要,因为应用程序使用集合中与 URL.
匹配的第一条路由
https://msdn.microsoft.com/en-us/library/system.web.routing.routetable.routes(v=vs.110).aspx
我试图在我的浏览器中访问 /elmah.axd,但是 returns:
{"message":"No HTTP resource was found that matches the request URI 'http://services.domain.com/elmah.axd'."}
服务器是本地的 (127.0.0.1),甚至我有我的 web.config Elmah 设置来保护它:
<elmah>
<security allowRemoteAccess="true" />
</elmah>
我的 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 }
);
}
我什至试过一次只忽略 3 种组合中的任何一种路线,但没有成功。
最后我的 global.asax 看起来像这样:
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
任何关于我可能遗漏的提示或想法都会很好。
在此先致谢,非常感谢您花时间研究这个问题。
最有可能的问题是缺少生成错误页面的处理程序。
确保在您的 web.config
文件中配置了以下处理程序:
<system.web>
...
<httpHandlers>
...
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<system.webServer>
...
<handlers>
...
<add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</handlers>
有了这些设置,您应该能够访问 elmah.axd
并按预期保护它。
您可以在此处获取从新项目更新的示例配置文件作为示例:https://brutaldev.com/download/30987439.zip
我终于成功了
通过添加到 WebApiConfig.cs 文件
config.Routes.MapHttpRoute("AXD", "{resource}.axd/{*pathInfo}", null, null, new StopRoutingHandler());
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 }
);
}
}
最后的更改是将其添加到 application_start 方法下的 global.asax
RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}");
特别感谢所有帮助我解决这个问题的人。
我加
config.Routes.IgnoreRoute("axd", "{resource}.axd/{*pathInfo}");
到WebApiConfig
就够了。
当我在 application_start 方法下的 global.asax 中添加以下内容时:
RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}");
直到我把它放在上面才起作用...
GlobalConfiguration.Configure(WebApiConfig.Register);
您添加到路由 属性 的路由顺序很重要,因为应用程序使用集合中与 URL.
匹配的第一条路由https://msdn.microsoft.com/en-us/library/system.web.routing.routetable.routes(v=vs.110).aspx