繁体   English   中英

AngularJS将返回404

[英]AngularJS Put Returning 404

使用AngularJS的“ $ http.put”时,PUT请求出现404错误。

这是我相关的AngularJS代码:

    /* toggles whether or not the link is disabled */
    toggleLinkStatus: function (isActive, linkGUID) {
        $http.put('/Explorer/Link/ToggleLinkStatus',
                {

                            isActive: isActive,
                            linkGUID: linkGUID
                }
        );
    }

和我相关的C#控制器代码:

    [HttpPut]
    public IHttpActionResult ToggleLinkStatus(Boolean isActive, Guid linkGUID)
    {
        return Ok();
    }

还有我的WebApiConfig代码

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        /** define routes for Explorer API */
        config.Routes.MapHttpRoute(
            name: "ExplorerAPI",
            routeTemplate: "Explorer/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

我在这里想念什么? 在呼叫的标题中,我可以看到数据正在请求有效负载中传递:

isActive: true
linkGUID: "b94badb3-2917-4129-9ae3-35d2a635f66d"

如果我使用POSTMAN进行普通查询字符串PUT,它将通过,但当我使用AngularJS时不会通过。

更新

这很有趣,如果我使用以下angularJS请求,它将通过:

    /* toggles whether or not the link is disabled */
    toggleLinkStatus: function (isActive, linkGUID) {
        $http.put('/Explorer/Link/ToggleLinkStatus',
                {
                    isActive: isActive,
                    linkGUID: linkGUID
                },
                {
                    params:
                        {
                            isActive: isActive,
                            linkGUID: linkGUID
                        }
                }
        );
    }

它也适用于此:

    /* toggles whether or not the link is disabled */
    toggleLinkStatus: function (isActive, linkGUID) {
        $http.put('/Explorer/Link/ToggleLinkStatus',
                {
                },
                {
                    params:
                        {
                            isActive: isActive,
                            linkGUID: linkGUID
                        }
                }
        );
    }

如果您成功使用GET(在浏览器地址栏中完成此操作)但未成功使用PUT,则说明您如何配置route / etc出现问题。我在代码段中看不到它的含义。您在这里,但是在配置路线方面肯定存在一些不对劲。 也许有一条较早的路线与犯规的GET相匹配。 这不是Angular的错。 您可以使用适用于Chrome的PostMan插件进行测试,它可以让您发送PUT / POST / DELETE以及GET,然后您可以查看结果。

尝试将控制器操作更改为使用类而不是原始数据类型。 MVC尝试从URI而不是请求正文中读取这些内容。

像这样:

[HttpPut]
public IHttpActionResult ToggleLinkStatus(RequestModel model)
{
    // model.IsActive ...
    return Ok();
}

public class RequestModel {
    bool IsActive {get;set;}
    Guid LinkGuid {get;set;}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM