2017-01-16 2 views
1

В настоящее время у меня возникла проблема с отправкой некоторых данных в веб-api. У меня есть два разных проекта. Один проект - это веб-приложение, на котором выполняется web api 2.0. Другой проект представляет собой простое консольное приложение, которое создает новый клиент http, создает объект json и пытается отправить его на веб-контроллер api. Однако, занимая должности, я продолжаю получать 405 (метод не разрешен ...). Я искал интернет, ища решения. Я даже дошел до проверки обработчиков в IIS Express и сравнил это с тем, что у меня есть в web.config. Еще не повезло.httpclient post async метод возврата не разрешен (405)

Так вот, что у меня есть для моего веб-API:

[RoutePrefix("api/media")] 
[Authorize] 
public class MultimediaController : ApiController 
{ 
    [HttpPost, Route("test")] 
    public IHttpActionResult Store([FromBody] TestRequest request) { 
     return Ok(request); 
    } 
... 

Далее, вот мой тест модель:

public class TestRequest { 
    public string testProp1 { get; set; } 
    public string testProp2 { get; set; } 
} 

Тогда, вот надрез кода из моей консоли приложения, пытается сделать POST:

 private const string testUrl = "/api/media/test/"; 

     private async Task<bool> RunPostTest() 
     { 
      var httpClient = CreateHttpClient(); 
      var content = JsonConvert.SerializeObject(new TestRequest {testProp1 = "hello", testProp2 = "world"}); 
      var jsonContent = new StringContent(content, Encoding.UTF32, "application/json"); 

      var response = await httpClient.PostAsync(testUrl, jsonContent); 

      if (response.StatusCode != System.Net.HttpStatusCode.OK) 
      { 
       Console.WriteLine($"Response code: {response.StatusCode}"); 
       return false; 
      } 

      return true; 
     } 

Вот мой web.config для обработчиков:

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <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> 

Я проверил iisexpress applicationhost.config. Много обработчиков там, но я просто опубликую последние несколько, поскольку они кажутся подходящими. Также отмечу, что WebDAV это все закомментирован везде ...

 ... 
     <add name="TRACEVerbHandler" path="*" verb="TRACE" modules="ProtocolSupportModule" requireAccess="None" /> 
     <add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" requireAccess="None" /> 
     <add name="ExtensionlessUrl-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG" 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" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" /> 
     <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" /> 
    </handlers> 
</system.webServer> 

Это постоянно возвращает HTTP 405. У меня есть другие методы здесь, которые выполняют GETs, и те, кто попал в конечных точках только штраф.

Также стоит отметить, что я использовал внешнее приложение для выполнения сообщения, такого как почтальон, отправляя сырой json в тело. И конечная точка была поражена! Похоже, что это имеет какое-то отношение к настройке iisexpress, но я могу ошибаться.

Кто-нибудь знает, что может быть? Или сослаться на какую-то ссылку, которая могла бы выявить проблему?

объект

ответ я получаю назад от отладки с помощью немедленного окна:

response 
{StatusCode: 405, ReasonPhrase: 'Method Not Allowed', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: 
{ 
    Pragma: no-cache 
    X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcZ204NDBkXERvY3VtZW50c1xQcm9qZWN0c1xWaXN1YWwgU3R1ZGlvIFByb2plY3RzXEdpdFxNb2JpbGl0eSBDT0VcU0JWVFxTQlZUXFNCVlRcYXBpXG1lZGlhXHRlc3Rc?= 
    Cache-Control: no-cache 
    Date: Mon, 16 Jan 2017 17:39:32 GMT 
    Server: Microsoft-IIS/10.0 
    X-AspNet-Version: 4.0.30319 
    X-Powered-By: ASP.NET 
    Content-Length: 1218 
    Allow: POST 
    Content-Type: text/html 
    Expires: -1 
}} 
    Content: {System.Net.Http.StreamContent} 
    Headers: {Pragma: no-cache 
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcZ204NDBkXERvY3VtZW50c1xQcm9qZWN0c1xWaXN1YWwgU3R1ZGlvIFByb2plY3RzXEdpdFxNb2JpbGl0eSBDT0VcU0JWVFxTQlZUXFNCVlRcYXBpXG1lZGlhXHRlc3Rc?= 
Cache-Control: no-cache 
Date: Mon, 16 Jan 2017 17:39:32 GMT 
Server: Microsoft-IIS/10.0 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
} 
    IsSuccessStatusCode: false 
    ReasonPhrase: "Method Not Allowed" 
    RequestMessage: {Method: POST, RequestUri: 'http://localhost:45106/api/media/test/', Version: 1.1, Content: System.Net.Http.StringContent, Headers: 
{ 
    Accept: application/json 
    Content-Type: application/json; charset=utf-32 
    Content-Length: 164 
}} 
    StatusCode: MethodNotAllowed 
    Version: {1.1} 
+1

Не могли бы вы сообщить подробности об ошибке? –

+0

Да ... Я добавлю результаты объекта ответа из окна Immediate Window – dvsoukup

ответ

0

Убедитесь, что внутри <system.webServer> части Web.config файла вашего проекта API следующим образом:

<modules runAllManagedModulesForAllRequests="true"> 
    <remove name="WebDAVModule"/> <!-- add this --> 
</modules> 

Кроме того, в секции обработчиков:

<handlers> 
    <remove name="WebDAV" /> 
    ... 
</handlers> 
+0

Хорошо, я добавил их, но все еще получаю ту же ошибку 405 – dvsoukup

0

попробуйте следующее: Добавлен ExtensionlessUrlHandler* и добавлен обратно. Меня устраивает.

<modules runAllManagedModulesForAllRequests="true"> 
    <remove name="WebDAVModule" /> 
    </modules> 
    <handlers> 
     <remove name="WebDAV" /> 
     <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> 
+0

Это уже в моем web.config, чтобы удалить и снова добавить его обратно – dvsoukup

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