【问题标题】:Only Get request is allowed, others returning 404 not found只允许Get请求,其他返回404 not found
【发布时间】:2014-07-26 04:14:13
【问题描述】:

我有这样的场景

使用 C# 的 ASP.net Web API 项目 对比 2013 IIS Express 8.0 托管在本地主机上

我有 3 个控制器

Controller A 服务于 HttpGet , controllerA(string id) 控制器 B 服务于 HttpPost,控制器 B(字符串 id) Controller C服务HttpPost,controllerC(string id, double x)

只有第一个有效,而 Post 请求总是返回 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>

【问题讨论】:

  • 请提供方法签名及其上方的任何属性,因为它们出现在您的代码中。另外,请提供您的 web.config 文件的 部分的内容。
  • 已添加,我刚刚测试了当我的 POST 请求没有参数时它是否有效,是我在客户端出现语法错误吗?

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


【解决方案1】:

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

在您的情况下,它可能找不到。所以它默认是一个无参数的动作方法,它没有找到它。您正在请求正文中传递参数。解决这个问题:

为您的参数使用[FromBody] 属性。

public string UpdateBus([FromBody]string id)

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 2020-03-16
    • 2023-02-24
    • 2012-08-10
    • 2021-03-31
    相关资源
    最近更新 更多