405 Метод не разрешен - при отправке объекта из jQuery в WCF - PullRequest
0 голосов
/ 20 марта 2019

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

Я отправляю почтовый запрос с объектом Person в качестве параметра, но я получаю:

405 - Ошибка метода не разрешена "

код:

контракт:

 [ServiceContract]
 public interface IPayMentService
 {
      [OperationContract]
      [WebInvoke(Method = "POST",
          UriTemplate = "/AddPerson",
          BodyStyle = WebMessageBodyStyle.Wrapped,
          RequestFormat = WebMessageFormat.Json,
          ResponseFormat = WebMessageFormat.Json)]
      void AddPerson(Person person); 
 }

 [DataContract]
 public class Person
 {
    [DataMember]
    public int Id { get; set; }
    [DataMember]
    public int Age { get; set; }
    [DataMember]
    public String Name { get; set; }
 }

обслуживание:

public class PayMentService : IPayMentService
{
    public void AddPerson(Person person) 
    {
        //..logic
    }
}

клиент:

 $(document).ready(function() {
 var person = {Id: 1, Age : 13, Name: "zag"};

  $.ajax({
        url: 'http://localhost:64858/PayMentService.svc/AddPerson',
        type: 'POST',
        contentType: "application/json",
        data: JSON.stringify(person),
        dataType: 'json'
    })
});

Спасибо

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Если ваш запрос опции не возвращает подходящий статус, запрос также не будет выполнен.Чтобы запрос опции возвращал 200 статусов, вам лучше изменить код статуса.Вы также можете добавить эти заголовки в web.config.

 <system.webServer>

  <httpProtocol>  
  <customHeaders>  
    <add name="Access-Control-Allow-Origin" value="*" />  
  <add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS" />
    <add name="Access-Control-Allow-Headers" value="*"/>
        </customHeaders>  
</httpProtocol>
  </system.webServer>

  protected void Application_EndRequest(object sender, EventArgs e)
    {
                 if(HttpContext.Current.Request.HttpMethod == "OPTIONS")
        {
            HttpContext.Current.Response.StatusCode = 200;
        }

    }

Если вы не знакомы с межрегиональным запросом, вы можете обратиться к mdn

https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

0 голосов
/ 20 марта 2019

попробуйте этот код в файле global.asax:

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "http://localhost");
        if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
        {
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, PUT, DELETE");

            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
           HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
           HttpContext.Current.Response.End();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...