2

Я пытаюсь получить доступ к /elmah.axd в моем Broswer, но он возвращает:Elmah.axd на WebAPI 2.2 - Нет HTTP ресурсов не было найдено

{"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 } 
      ); 
     } 

Я даже пытался только игнорирование один маршрут в то время из любой из трех комбинаций и не повезло.

наконец мой global.asax выглядит следующим образом:

protected void Application_Start() 
     { 
      GlobalConfiguration.Configure(WebApiConfig.Register); 

     } 

Любой намек или идея о том, что я мог бы не быть, было бы хорошо.

Заранее благодарим за то, что вы потратили время на это.

ответ

7

я, наконец, сделал это.

Добавив к 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 } 
      ); 
     } 


    } 

И последнее изменение добавить это к глобальным. asax по методу application_start

RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}"); 

Особая благодарность всем, кто помог мне с этой проблемой.

+0

Наконец-то нашел настоящий ответ этой странной проблемы, спасибо @acido –

+2

Это сработало для меня, но мне нужен был только «RouteTable.Routes.Ignore» («{resource} .axd/{* pathInfo}"); 'in Applicaiton_Start. – Brian

1

Наиболее вероятной проблемой является отсутствие обработчиков для создания страницы с ошибкой.

Убедитесь, что следующие обработчики настроены файл 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

+0

К сожалению, даже изменение этого не срабатывало. – acido

+0

Я обнаружил, что мне нужно переместить обработчик Elmah, чтобы он стал первой записью в списке обработчиков. –

2

Для меня добавления

config.Routes.IgnoreRoute("axd", "{resource}.axd/{*pathInfo}"); 

в WebApiConfig было достаточно.

1

Когда я добавил следующее в global.asax по методу Application_Start:

RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}"); 

Это не сработало, пока я не поставил его выше ...

GlobalConfiguration.Configure(WebApiConfig.Register); 

Порядок маршрутов, которые добавляются к свойству Routes является существенным, так как приложение использует первый маршрут в коллекции, которая соответствует URL.

https://msdn.microsoft.com/en-us/library/system.web.routing.routetable.routes(v=vs.110).aspx

 Смежные вопросы

  • Нет связанных вопросов^_^