仅在未采用参数时才发现 Webmethod
Webmethod only found if no parameter taken
-为清楚起见进行编辑-
我试图将第一种方法修改为第二种方法,而不是同时使用它们。
-编辑-
我有两个 C# Web 方法,一个没有参数:
[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();
第一种方法没有参数 returns test success
但第二种方法有参数 returns 404 未找到错误。
谁能告诉我我做错了什么?
你不能有 2 个路由使用相同的动词并且 url -> 框架不能消除它们之间的歧义。如果参数是简单值(例如整数),请考虑将参数添加到路由中:
[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 动词。
-为清楚起见进行编辑-
我试图将第一种方法修改为第二种方法,而不是同时使用它们。
-编辑-
我有两个 C# Web 方法,一个没有参数:
[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();
第一种方法没有参数 returns test success
但第二种方法有参数 returns 404 未找到错误。
谁能告诉我我做错了什么?
你不能有 2 个路由使用相同的动词并且 url -> 框架不能消除它们之间的歧义。如果参数是简单值(例如整数),请考虑将参数添加到路由中:
[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 动词。