2017-01-10 3 views
1

$ .http reqeust и веб-апи как на локальном хосте, но различных приложений«Запрашиваемый ресурс не поддерживает метод HTTP 'POST' - 405 ответ

угловые JS (в другом приложении asp.net)

.
return $http({ 
    method: "POST",      
    url: config.APIURL + 'Parts', 
    data: {'final':'final'}, 
    headers: { 'Content-Type': 'application/json' } 
}); 

Web API (в отдельном приложении) respon

[HttpPost] 
public Part Post(string final) 
{ 
       ... 
} 

Ошибка себе:

{ "Сообщение": "Запрашиваемый ресурс не поддерживает метод HTTP 'POST'."}

Web API 2 - уже отмеченные [HttpPost], даже если не нужно.

Мой reqeust и пакет ответа являются следующие:

**General** 
    Request URL:http://localhost/SigmaNest.WebAPI/api/Parts 
    Request Method:POST 
    Status Code:405 Method Not Allowed 
    Remote Address:[::1]:80 
    **Response Headers** 
    view source 
    Allow:GET 
    Cache-Control:no-cache 
    Content-Length:73 
    Content-Type:application/json; charset=utf-8 
    Date:Tue, 10 Jan 2017 13:05:59 GMT 
    Expires:-1 
    Pragma:no-cache 
    Server:Microsoft-IIS/10.0 
    X-AspNet-Version:4.0.30319 
    X-Powered-By:ASP.NET 
    **Request Headers** 
    view source 
    Accept:application/json, text/plain, */* 
    Accept-Encoding:gzip, deflate, br 
    Accept-Language:en-US,en;q=0.8 
    Connection:keep-alive 
    Content-Length:17 
    Content-Type:application/json;charset=UTF-8 
    Host:localhost 
    Origin:http://localhost 
    Referer:http://localhost/SigmaNest.Web/app/views/index.html 
    User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 
    **Request Payload** 
    view source 
    {final: "final"} 
    final 
    : 
    "final" 

может любой, пожалуйста, помогите мне решить эту ошибку 405.

+0

Просьба также передать код сервера –

+0

уже опубликованный. – dsi

ответ

1

ASP.Net пытается сопоставить ваш пост Ajax с соответствующим действием контроллера, потому что нет ни одного, который соответствует тому, что вы пытаетесь вызвать.

В этом случае вы пытаетесь передать объект {'final':'final'}, но принимаете строку. Post(string final) и ASP.Net не могут соответствовать этому конкретному действию с включенным POST.

Вы можете stringify Ваш JavaScript Object

return $http({ 
    method: "POST",      
    url: config.APIURL + 'Parts', 
    data: JSON.stringify({'final':'final'}), // Strinify your object 
    headers: { 'Content-Type': 'application/json' } 
}); 

Или изменить сервера метод на стороне, чтобы получить класс, чтобы соответствовать объекту вы подачи. Например:

// DTO MyObject - .Net will ModelBind your javascript object to this when you post 
public class MyObject{ 
    public string final {get;set;} 
} 
// change string here to your DTO MyObject 
public Part Post(MyObject final){ 
     ... 
} 
+0

Большое спасибо. Оно работает. :) спасибо за объяснение тоже. – dsi

+0

Добро пожаловать. И объяснения важны :) Так много людей просто публикуют код – Darren

+0

да. правильно. Благодарю. – dsi

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

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