仅在未采用参数时才发现 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 动词。