2015-12-09 2 views
1

Я хочу передать объект json в [WebMethod].Публикация json на WebService

Мой [WebMethod] выглядит следующим образом;

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public void UpdateBooksOrder(Success succ) 
{ 
    try 
    { 
     if (succ != null) 
     {        
      updateDal.LogSGDetails(succ); 
     } 
    } 
    catch (Exception ex) 
    { 
     logger.Error("exception ", ex); 
    } 
} 

И, я получаю URL [WebMethod] как;

http://localhost:50596/OrderStatusUpdate.asmx?op=UpdateBooksOrder 

Для тестирования, я передаю объект JSON выше [WebMethod] с помощью HTML + Ajax, как это;

<script type="text/javascript"> 
     $("#btnUpdate").live("click", function() { 
     //alert("OK"); 
      var succ = {}; 
      succ.id = "1"; 
      succ.refrerence = "148997"; 
      succ.external_ref = "GF0000148997"; 
      succ.status = "1"; 
      succ.status_name = "test";   

      $.ajax({ 
       type: 'POST', 
       url: 'http://localhost:50596/OrderStatusUpdate.asmx?op=UpdateBooksOrder', 
       data: "{succ:" + JSON.stringify(succ) + "}", 
       contentType: 'application/json; charset=utf-8', 
       dataType: 'json', 
       success: function() { 
        alert("OK"); 
       } 
      }); 
     }); 
    </script> 

Когда я запускаю проект WebService и вызываю его через html, я получаю следующую ошибку;

Status Code:405 Method Not Allowed 

Пожалуйста, объясните мне, как это можно решить.

ответ

1

Я сделал это внизу. Он работает нормально. Веб-сервис

[WebMethod] 
    public string OrderstatusUpdate(OrderStatus orderStatus) 
    { 
     //do what ever 
     return "Success"; 
    } 

OrderStatus Класс

[Serializable] 
public class OrderStatus 
{ 
    public int Id { get; set; } 
    public string Reference { get; set; } 
} 

Java скрипт

function resolveObject(data) { 
     if (!data.hasOwnProperty('d')) return data; 
     else return data.d; 
    } 
    $.ajaxSetup({ "contentType": "application/json;charset=utf-8", "dataType": "json", "error": function (e) { console.log(e); return; } }); 

    function saveOrder() { 


     var a = { orderStatus: {} }; 
     a.orderStatus.Id = 1; 
     a.orderStatus.Reference = "reference"; 

     $.ajax({ 
      type: "POST", 
      url: "../services/OrderService.asmx/OrderstatusUpdate", 
      data: JSON.stringify(a), 
      success: function (r) { 
       alert(resolveObject(r)); 
      } 
     }); 

    } 

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

[System.Web.Script.Services.ScriptService] 
1

Атрибут [WebMethod] обычно используется для старых веб-служб xml.

Что это за проект? Если это более новый проект, ознакомьтесь с новыми конструкциями, например [HttpPost]. Вы можете отправить запрос на дальнейшее расследование (используя скрипач)?

+1

Также , возьмите lo ok at this: http://stackoverflow.com/questions/20101621/asp-net-webmethod-405 – schmoopy

+0

Да, это старое приложение, использующее .Net 3.5 Скрипач Я никогда не использовал его. Я только что установил, в какой раздел я должен посмотреть? Сделал все на другом посту, которое вы поделили, но ничто из этого не дало мне решения. –

+0

В скрипаче посмотрите на инспектора и выберите «raw» для запроса - затем опубликуйте здесь :-) – schmoopy

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