【问题标题】:Angular app post to MVC webapi back end returns 405Angular 应用程序发布到 MVC webapi 后端返回 405
【发布时间】:2016-01-09 19:01:29
【问题描述】:

我有一个 Angular/MVC 应用程序组合。用户进入可以修改记录,单击一个按钮调用一个服务,该服务执行一个帖子以更新数据库中的记录。它命中控制器(我在构造函数上有断点),但不是方法并返回 405。

按钮点击处理程序:

$scope.submit = function() {
    console.log($scope.request);
    requests.updateRequest($scope.request).then(onUpdate, onError);
}

请求资源:

var updateRequest = function (request) {
    return $http.post("/api/request/update/", request).then(function (response) {
        return response.data;
    });
};

路由在单独的文件中配置:

 config.Routes.MapHttpRoute("UpdateRequest", "api/request/update/", new { controller = "Requests", action = "UpdateRequest"});

RequestController 构造函数被命中,但我无法弄清楚为什么没有命中以下端点。

控制器方法:

 [HttpPost]
    public HttpResponseMessage UpdateRequest([FromBody] IRequest request)
    {
        try
        {
            var response = new HttpResponseMessage
            {
                StatusCode = HttpStatusCode.OK,
                Content =
                    new ObjectContent(
                    typeof(int),
                    request.Id,
                    new JsonMediaTypeFormatter())
            };
            return response;
        }
        catch (Exception ex)
        {
            throw new HttpResponseException(HttpStatusCode.InternalServerError);
        }   
    }

有什么想法吗?

【问题讨论】:

  • 我尝试了一些端点方法的变体。一个接受对象作为参数并尝试使用 httpput 的方法。笔记。资源服务确实有效,因为我有一个首先检索数据的 Get 方法。

标签: c# .net angularjs asp.net-web-api


【解决方案1】:

默认参数绑定不适用于接口。尝试改变:

[FromBody] IRequest 请求

具体类型,例如

请求请求

如果您确实想在 webapi 中使用接口,请查看 this blog post

【讨论】:

  • 这是一个非常明显的观点!谢谢,不敢相信我错过了!
  • 不幸的是仍然没有快乐。我现在得到了可怕的 POST localhost:52961/api/request/update 405(不允许的方法)尽管我在 web.config 中允许使用 ET、HEAD、POST、DEBUG、PUT、DELETE、PATCH、OPTIONS。
  • 将其保留为 HttpPost,否则您必须进行额外的配置才能使 put\delete 工作。这是控制器中唯一的 HttpPost 方法吗?显示整个控制器类代码可能更容易
  • 还可以尝试删除您的 config.route.MapHttpRoute 行。如果您的 HttpPost 方法是该类中唯一的方法,则默认情况下会选择它。如果不是在函数上方添加路由属性
猜你喜欢
  • 2016-12-12
  • 2015-11-26
  • 1970-01-01
  • 2011-04-18
  • 2018-03-05
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 2018-06-29
相关资源
最近更新 更多