我正在尝试创建简单的页面,在其中使用 $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/