ASP.net WebApi POST возвращает ошибку 405

Я создаю приложение Angular 5 с бэкэндом asp.net. Я хочу отправить запрос POST, я протестировал его через Postman, и он работает абсолютно нормально, однако, когда я пытаюсь сделать это внутри Angular, я получаю ошибку 405. Я использую HttpClient с заголовками: новые HttpHeaders({ 'Content-Type': 'application/json' }), так же, как Postman.

Я пытался изменить web.config

  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*"/>
        <add name="Access-Control-Allow-Headers" value="Origin, Authorization, X-Requested-With, Content-Type, Accept"/> 
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS"/>
      </customHeaders>
    </httpProtocol>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="WebDAVModule"/>
    </modules>
    <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>
  </system.webServer>

но, похоже, это не работает.

Угловой POST-код (с заголовками: новые HttpHeaders ({'Content-Type': 'application / json'})

   setDopuskItem(itemToSave: DopuskItem){
     let endpoint = this._dopuskApiUrl + 'set';
     let body = JSON.stringify(itemToSave);

     return this.http.put(
      endpoint,
      body,
      httpOptions)
      .catch(this.handleError);

}

1 ответ

Это потому, что браузеры отправляют предварительный запрос перед отправкой основного запроса.

Вы можете добавить следующий код в ваше приложение webapi: global.asax.cs

protected void Application_BeginRequest()
{
    if (Request.HttpMethod == "OPTIONS") {
        Response.Flush();
    }
}
Другие вопросы по тегам