仅允许获取请求,其他人返回404未找到

时间:2014-07-26 04:14:14

标签: c# asp.net asp.net-mvc iis-express

我有这样的场景

使用C#的ASP.net Web API项目 VS 2013 IIS Express 8.0托管在localhost上

我有3个控制器

Controller A提供HttpGet,controllerA(字符串id) 控制器B提供HttpPost,controllerB(字符串id) 控制器C提供HttpPost,controllerC(字符串id,双x)

只有第一个正在工作,而邮政请求总是返回404,任何人都知道什么是错的?是由于IIS上的安全设置?

代码如下

控制器代码

[HttpPost]
[ActionName("UpdatePosition")]
public string UpdateBus(string id)
{
    return " request is received - post";
}

客户端函数调用

<script>
    function sendPutRequest() {
        $.ajax({
            url: 'http://localhost:54284/api/bus/updatePosition/',
            type: 'POST',
            data: { id: 'test123' },
            success: function (result) {
                $('#output').append(result);
            }
        });
    }
</script>

1 个答案:

答案 0 :(得分:2)

默认情况下,Web API从URL中读取POST操作的原始参数值(int,bool,string等)。

在你的情况下,它可能找不到一个。因此它默认为无参数动作方法,但它找不到它。您正在请求正文中传递参数。解决这个问题:

使用参数的[FromBody]属性。

public string UpdateBus([FromBody]string id)

如果您不想使用此属性,则另一个选项是在AJAX请求的查询字符串中发送参数。

url: 'http://localhost:54284/api/bus/updatePosition?id=' + 'test123'

请注意,参数只能使用一个[FromBody]属性。 如果您有多个基本参数,请尝试为所有这些参数创建一个类,并将该类作为参数。