【问题标题】:Webservice returns 404 (Not Found)Web 服务返回 404(未找到)
【发布时间】:2015-10-22 02:48:28
【问题描述】:

大家好,我正在构建一个网络服务。该服务是在我的本地主机上构建的,所以当我在浏览器中点击 URL 时,例如,http://127.0.0.1/api/MyTest/GetStatus 实际上会响应预期的消息。

<Error>
<Message>
The requested resource does not support http method 'GET'.
</Message>
</Error>

但是,当我尝试使用脚本文件点击它时,它会返回 404 未找到。消息返回为"No HTTP resource was found that matches the request URI 'http://127.0.0.1/api/MyTest/GetStatus'."

<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script type="text/javascript">
$.ajax({
    url: 'http://127.0.0.1/api/MyTest/GetStatus',   
    type: 'POST',    
    contenttype: 'application/json; charset=utf-16',   
    success: function (msg) {
        console.log(msg);
    }
});
</script>

我在其他服务上使用的相同脚本,它们都正确响应。有什么想法吗?

【问题讨论】:

    标签: .net web-services c#-4.0


    【解决方案1】:

    我将做出一些假设,因为您没有向我们提供您的服务器端代码。

    我假设您正在使用 WebApi,并且您的控制器方法看起来类似于:

    public class MyTestController : ApiController
    {
        [HttpPost, ActionName("GetStatus")]
        public void GetStatus(string value)
        {
    
        }
     }
    

    这可以解释为什么你会得到

    请求的资源不支持 http 方法 'GET'。

    当您通过浏览器发出请求时。

    在您的 POST 中找不到 404 的原因可能是因为您没有在请求中发布任何数据,但您的控制器方法应该有一些价值。

    尝试更改您的 AJAX 调用以包含 POST 数据:

    $.ajax({
        url: 'http://127.0.0.1/api/MyTest/GetStatus',   
        type: 'POST',    
        data: {someData}
        contenttype: 'application/json; charset=utf-16',   
        success: function (msg) {
            console.log(msg);
        }
    });
    

    确保您的 POST 数据格式与您的控制器方法签名相匹配。

    您将控制器方法称为“GetStatus”,因此我假设您正在尝试从服务器获取一些状态。

    真的需要 POST 吗?您的意思是改用 GET 吗?

    如果是这样,您应该将您的方法签名更改为:

    public class MyTestController : ApiController
    {
        [HttpGet, ActionName("GetStatus")]
        public string GetStatus()
        {
            return "SomeStatus";
        }
    }
    

    并将您的 AJAX 调用更新为:

    $.ajax({
        url: 'http://127.0.0.1/api/MyTest/GetStatus',   
        type: 'GET',    
        contenttype: 'application/json; charset=utf-16',   
        success: function (msg) {
            console.log(msg);
        }
    });
    

    希望对您有所帮助。

    【讨论】:

    • 谢谢伙计,它非常接近根本原因 - 方法签名。赞赏。
    • 没问题,这404问题大多是你的方法签名或者路由问题。
    猜你喜欢
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    相关资源
    最近更新 更多