只有在没有参数的情况下才会找到Web方法

时间:2017-01-06 12:24:21

标签: c# http-post webmethod

为清晰起见,

-EDIT -

我试图将第一种方法修改为第二种方法,而不是一次性使用它们。

- 编辑 -

我有两个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();    

第一个没有参数的方法返回test success,但第二个接受参数的方法返回404未找到的错误。

有人能告诉我这里的错误吗?

1 个答案:

答案 0 :(得分:1)

你不能拥有2个具有相同动词和网址的路由 - &gt;框架无法消除它们之间的歧义。如果它是一个简单的值(例如整数),请考虑将该参数添加到路由中:

[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动词。

相关问题