Ошибки HTTP 405 после публикации приложений Web API 2

У меня есть контроллер Web Api, и я проверил все действия на локальном хосте, и он работает хорошо. Но когда я опубликовал его на веб-сервере, просто действия с [HttpGet] работает и [HttpPost] Действия возвращают ошибку 405

public class ContentController : ApiController
{
    [HttpGet]
    public async Task<IHttpActionResult> AdvantageList()
    {
        //return ok 200
    }
    [HttpPost]
    public async Task<IHttpActionResult> SaveAdvantage(ContentModel model)
    {
        //return 405 
    }
}

Я использовал ниже метод на клиенте

var r = await ClientManager.Client.PostAsJsonAsync("api/Content/SaveAdvantage", Advantage);

Но он будет перезапущен ниже сервера формы ответа. Я использовал PostAsJsonAsync метод, но он говорит, что The requested resource does not support http method 'GET' Кто-нибудь знает почему?

{StatusCode: 405, ReasonPhrase: "Метод не разрешен", Версия: 1.0, Содержимое: System.Net.Http.StreamContent, Заголовки: { Pragma: no-cache X-Powered-By-Plesk: PleskWin Соединение: закрыть Cache-Control: no-cache Дата: Пт, 29 сен 2017 08:53:51 GMT Сервер: Microsoft-IIS/8.0 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Длина содержимого: 72 Разрешить: POST Тип контента: приложение / JSON; charset=utf-8 Истекает: -1 }}

А также

"{\"message\":\" Запрашиваемый ресурс не поддерживает http-метод 'GET'.\"}"

У меня есть ниже в моей конфигурации веб-API:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{action}");
        config.Routes.MapHttpRoute("WithId", "api/{controller}/{action}/{id}", new { id = RouteParameter.Optional });
        config.Routes.MapHttpRoute("TwoId", "api/{controller}/{action}/{id}/{id2}", new { id = RouteParameter.Optional, id2 = RouteParameter.Optional });

        config.MapHttpAttributeRoutes();

        var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
        formatter.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
    }
}

У меня ниже обработчики в Web.config

<system.webServer>
<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>

Я использую это приложение webapi2 в своем приложении winform.

3 ответа

Это код ошибки http, который говорит нам, что это правильная проблема. Посмотрите на: https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP

В настройках хостинга на моем веб-сервере было свойство Preferred domain, я изменил его на none и после этого он работал нормально

Настройка предпочитаемого домена

У вас проблема с правами на веб-сервере. Код http 405 означает, что использование метода post запрещено на вашем веб-сервере. Убедитесь, что вы аутентифицированы при отправке запроса, а также убедитесь, что ваш запрос содержит маркер для аутентификации.

Другие вопросы по тегам