2015-07-31 4 views
1

Так что я действительно борюсь с этим и прочесываю интернетов и пробовал все возможные предложения, которые я мог найти.Странные ошибки 405 против методов web api

У меня есть веб-проект api C# и веб-проект JS. При работе на местном уровне все работает нормально. Когда я публикую в Azure, я могу использовать методы api через консоль REST, и все работает нормально. Проблема заключается в том, что мое веб-приложение пытается совершать одни и те же вызовы по каждому методу (за исключением начального вызова токена) возвращает значение 405.

Я уже с помощью настроек CORS и web.config я не уверен, что требуется больше или нет ... он становится очень запутанным, но я попытаюсь вставить соответствующие биты здесь.

мои настройки web.config system.webServer

<modules> 
    <remove name="FormsAuthentication" /> 
    <remove name="WebDAVModule"/> 
</modules> 

<httpProtocol> 
    <customHeaders> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    </customHeaders> 
</httpProtocol> 

<handlers> 
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
    <remove name="OPTIONSVerbHandler" /> 
    <remove name="TRACEVerbHandler" /> 
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
</handlers> 

WebApiConfig.cs Регистрация метод

 config.SuppressDefaultHostAuthentication(); 
     config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

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

И пример апи контроллер

[Authorize] 
    [Route("getall")] 
    [HttpGet] 
    public IHttpActionResult GetAll() 
    { 
     return Ok(PersonRepository.Get()); 
    } 

И в JS $http.get($rootScope.serviceBase + 'api/person/getall')

Итак, подведем итог ситуации здесь:

  • При запуске локально звонки работают нормально
  • при публикации в Azure, я могу сделать прямые вызовы остальных конечных точек тонких
  • при публикации в лазури, мой JS возвращает 405 ошибок, не связанных с ошибками
  • Если вместо этого я удаляю заголовок CORS из web.config и использую enableCors в моем методе Register, я не могу даже нажать/токен, вместо этого я получаю ошибки CORE для предполетания везде (хотя я все еще могу успешно сделать звонки с консоли отдыха), которая является исключительно запутанной

Обновления

Я пополняемый журнал материала, который я пытаюсь здесь:

  1. Добавлено <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> в customHeaders в WebConfig, никаких изменений

ответ

0

Fixed ! Благодаря составлению различных StackOverflow сообщений (я люблю этот сайт) я восстановил свой web.config

Incase это полезным для кого-то еще, вот мой новый web.config

<system.web> 


<webServices> 
    <protocols> 
    <add name="HttpGet"/> 
    <add name="HttpPost"/> 
    </protocols> 
</webServices> 

<authentication mode="None" /> 
<compilation debug="true" targetFramework="4.5" /> 
<httpRuntime targetFramework="4.5" /> 
<customErrors mode="Off" /> 
</system.web> 
<system.webServer> 
<httpProtocol> 
    <customHeaders> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" /> 
    <add name="Access-Control-Allow-Headers" value="Content-Type,Authorization" /> 
    </customHeaders> 
</httpProtocol> 
<modules runAllManagedModulesForAllRequests="false"> 
    <remove name="WebDAVModule" /> 
</modules> 

<validation validateIntegratedModeConfiguration="false" /> 
<handlers> 
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 

    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 

</handlers> 

</system.webServer> 
+0

Было бы полезно, если вам объяснил, какие конкретные изменения вам пришлось внести. – xgp

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