asp.net-mvc - AngularJS $http.put 不适用于 ASP.NET MVC Controller

标签 asp.net-mvc angularjs

我正在尝试创建简单的页面,在其中使用 $http.put 向服务器发送一些数据。

脚本代码

<script>
var myApp = angular.module("myApp", []);
myApp.controller("HttpPostController", function ($scope, $http) {

    $scope.SendHttpPostData = function () {

        var data = $.param({
            firstName: $scope.firstName,
            lastName: $scope.lastName,
            age : $scope.age
        });

        $http.put('/ServerRequest/PutDataResponse', data)
        .success(function (data, status, headers, config) {
            $scope.ServerResponse = data;
        })
        .error(function (data, status, header, config) {
            $scope.ServerResponse =  htmlDecode("Data: " + data +
                "\n\n\n\nstatus: " + status +
                "\n\n\n\nheaders: " + header +
                "\n\n\n\nconfig: " + config);
        });
    };

});</script>

我的 HTML 代码

<div ng-app="myApp" ng-controller="HttpPostController">
<form ng-submit="SendHttpPostData()">
    <p>First Name: <input type="text" name="firstName" ng-model="firstName" required /></p>
    <p>Last Name: <input type="text" name="lastName" ng-model="lastName" required /></p>
    <p>Age : <input type="number" name="age" ng-model="age" required /></p>
    <input type="submit" value="Submit" />
    <hr />
    {{ ServerResponse }}
</form></div>

ASP.NET MVC Controller 操作方法

    [HttpPut]
    public ContentResult PutDataResponse(string firstName, string lastName, int age)
    {
        return Content("First name: " + firstName +
            " | Last name: " + lastName +
            " | Age: " + age +
            " | Request Type: " + Request.RequestType.ToString());
    }

我收到的错误消息如下

TTP 错误 404.0 - 未找到 您正在查找的资源已被删除、名称已更改或暂时不可用。最可能的原因: Web 服务器上不存在指定的目录或文件。 URL 包含拼写错误。自定义过滤器或模块(例如 URLScan)限制对文件的访问。您可以尝试的操作: 在 Web 服务器上创建内容。查看浏览器 URL。检查失败的请求跟踪日志并查看哪个模块正在调用 SetStatus。

所以在 ASP.NET MVC 中它不起作用。 (POST 和 GET 有效)。我使用 ASP.NET MVC Web API 尝试了上述方法,效果很好。我能够使用 mvc web api 的 PUT 方法发送和接收响应。

问题是为什么它在 ASP.NET MVC 中不起作用,即使方法动词是 [HttpPut]。

谢谢

最佳答案

好吧,经过一番努力,我找到了解决方案。实际上,问题在于默认情况下 ASP.NET MVC 不允许“PUT”或“DELETE”请求类型,因此我们需要在 web.config 文件中启用它们,如下所示。

  <system.webServer>
<modules>
  <remove name="FormsAuthentication" />
  <remove name="FormsAuthenticationModule" />
</modules>
<handlers>
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <remove name="OPTIONSVerbHandler" />
  <remove name="TRACEVerbHandler" />

  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

</handlers>
  </system.webServer>

注意 ExtensionlessUrlHandler-Integrated-4.0 处理程序。这就是不同之处。这允许所有类型的动词都可以接受,因此即使 PUT 请求现在也可以与 ASP.NET MVC 一起使用。

关于asp.net-mvc - AngularJS $http.put 不适用于 ASP.NET MVC Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31263554/

相关文章:

c# - session 在 Controller 方法中变为空

c# - EF 可选一对一内部

javascript - 如何使用javascript trim 单词之间和逗号后的空格

javascript - angularjs json两种方式绑定(bind)到文本区域

javascript - 如何在 Node JS 中获取新行并将其作为 JSON 传递并将其保存在文本文件中

javascript - 如何从 javascript 打开新窗口并在关闭时从中获取值

c# - 在 MVC4 项目中找不到身份和访问选项卡

c# - 我们如何在 Visual Studio Code 中调试 ASP.NET MVC Web 应用程序?

angularjs - $compile 和 Angular 指令上的编译函数之间的区别?

html - 不同指令的 Angular 变化css