加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – AngularJS $http.put不能与ASP.NET MVC控制器一

发布时间:2020-12-16 09:55:23 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试创建一个简单的页面,我使用$http.put将一些数据发送到服务器. 脚本代码 scriptvar myApp = angular.module("myApp",[]);myApp.controller("HttpPostController",function ($scope,$http) { $scope.SendHttpPostData = function () { var data = $.
我正在尝试创建一个简单的页面,我使用$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,header,config) {
            $scope.ServerResponse =  htmlDecode("Data: " + data +
                "nnnnstatus: " + status +
                "nnnnheaders: " + header +
                "nnnnconfig: " + 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控制器动作方法

[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服务器上不存在指定的目录或文件.该网址包含印刷错误.自定义筛选器或模块(如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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读