2017-01-06 35 views
0

-EDIT清晰度 -Webmethod只發現如果沒有參數

我試圖修改第一個方法到第二個,而不是一次使用它們。

CNC中

我有兩個C#的Webmethods,一個不帶參數:

[System.Web.Http.HttpPost] 
    [System.Web.Http.Route("api/call/postCall")] 
    public string postCall() 
    { 
     return "test success"; 
    } 

和一個帶有一個參數:

[System.Web.Http.HttpPost] 
    [System.Web.Http.Route("api/call/postCall")] 
    public string postCall(int call) 
    { 
     return "posted value = " + call; 
    } 

我叫他們都與此:

 string data = "call=55"; 
     byte[] dataStream = Encoding.UTF8.GetBytes(data); 
     string request = "http://<mySite>/api/call/postCall"; 
     WebRequest webRequest = WebRequest.Create(request); 
     webRequest.Method = "POST"; 
     webRequest.ContentType = "application/x-www-form-urlencoded"; 
     webRequest.ContentLength = dataStream.Length; 
     Stream newStream = webRequest.GetRequestStream(); 
     newStream.Write(dataStream, 0, dataStream.Length); 
     newStream.Close(); 
     WebResponse webResponse = webRequest.GetResponse();  

第一種不帶參數的方法返回test success,但採用參數的第二種方法返回404未找到的錯誤。

有人能告訴我我在做什麼錯嗎?

+0

嘗試在類的上方添加[WebServiceBinding(ConformsTo = WsiProfiles.None)]。公共類服務:System.Web.Services.WebService {//您的方法} –

+0

謝謝,但我仍然得到了404。 – Robert

回答

1

你不能有2條路線具有相同的動詞和網址 - >框架不能消除它們之間的歧義。考慮將參數添加到路由,而不是如果它是一個簡單的值(如整數):

[System.Web.Http.HttpPost] 
[System.Web.Http.Route("api/call/postCall/{call}")] 
public string postCall(int call) 
{ 
    return "posted value = " + call; 
} 

,然後調用這樣的:

var request = WebRequest.Create("http://<mySite>/api/call/postCall/55"); 
request.Method = "POST"; 
using (var response = request.GetResponse()) 
using (var stream = response.GetResponseStream()) 
using (var reader = new StreamReader(stream)) 
{ 
    string result = reader.ReadToEnd(); 
} 

而且對於未在修改某些狀態的方法您可能會考慮使用GET動詞的服務器。例如

+0

謝謝達林 - 將參數添加到路線有竅門。 – Robert