簡體   English   中英

調用ASP.NET中生成的JSON WebService的URL

[英]URL to call the JSON WebService produced into ASP.NET

我已經使用Visual Studio 2012到C#中完成了一個Web服務。 我通常使用SOAP,但現在需要使用JSON。 因此,我已使用以下代碼創建SOAP方法:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string test() 
{
     var testArray = new List<clienti>();
     testArray.Add(new clienti() {nome = "Mark", cognome = "Reed", email = "mark.reed@test.com"});
     var serializer = new JavaScriptSerializer();
      return serializer.Serialize(testArray);
}

我可以直接從URL調用此方法嗎? (這是我想要獲得的真正目標)這樣的東西: http : //ws.mysite.com/serice1.asmx/test

如果我嘗試在斜杠后輸入帶有方法名稱的URL,則不會返回數據,而是URL格式錯誤!!! 在調試模式下,如果我單擊按鈕方法,一切都將正常運行 在此處輸入圖片說明

因此,您的問題的答案是肯定的,但是讓我們從100%有效的Ajax場景開始。

不過,我想為您澄清一下,service1.asmx中的“ test()”方法不是您所謂的“ Soap方法”。 它是“ Web服務方法”,它返回JSON。 可以使用HTTP協議或SOAP協議進行調用。 因為您已將[ScriptMethod]添加到Web方法中,所以現在可以使用HTTP Get請求對其進行調用。 如果刪除[ScriptMethod]屬性,則只能使用HTTP POST請求或SOAP請求調用“ test()”。

以下jQuery Ajax調用將與service1.asmx / test一起使用:

 $.ajax({
            type: "POST",
            url: "Service1.asmx/test",
            data: "{ ifTestHadAParameter: 'hello world'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                var myData = JSON.parse(data.d); // data.d is a JSON formatted string, to turn it into a JSON object
                                                 // we use JSON.parse
                // now that myData is a JSON object we can access its properties like normal
            }
        });

如果您使用的是ASP.NET 3.5或更低版本,則ASP.NET Web服務會將JSON響應包裝在外部JSON {}中,以用於HTTP Get和Post請求,以針對某種類型的黑客行為進行投影。 因此,我的jQuery Ajax代碼片段中的data.d。 如果使用ASP.NET> 4.0,則成功函數中的數據將包含來自service1.asmx / test的響應,而無需data.d。

現在調用http://ws.mysite.com/serice1.asmx/test ,這在您所說的“瀏覽器”中將不起作用,但是您最終可能不想在瀏覽器中使用該URL,這就是方法您為簡單起見說了您的問題。

您需要使用http://ws.mysite.com/serice1.asmx/test.正確設置Get請求的格式http://ws.mysite.com/serice1.asmx/test. 因此,在C#中,使用HTTPRequest .NET庫,您應該能夠准備適當的HTTP Get Request來調用Web服務URL,如果您在Get request標頭中具有正確的contentType,則基本上可以在C#代碼中模擬瀏覽器請求。

解決此問題的一個好工具叫做Fiddler ,您可以輕松地創建HTTP Get請求並更改內容類型。

不能,因為asmx web服務沒有像webapi或MVC這樣的路由器,最好創建一個webapi項目,添加具有空讀寫方法的控制器,並在其中返回數組,它將自動以JSON,XML或BSON默認JSON序列化(您可以在在客戶端請求中接受標頭)示例方法

public class mycontroller: ApiController
  {

    public string Get()
    {
      var testArray = new List<clienti>();
      testArray.Add(new clienti() {nome = "Mark", cognome = "Reed", email =    "mark.reed@test.com"});
       return testArray ;
    }

您可以像此site / api / controller一樣訪問網址

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM