如何在 IIS 8.x 或更高版本上允许本地和远程的 POST、PUT
Posted
技术标签:
【中文标题】如何在 IIS 8.x 或更高版本上允许本地和远程的 POST、PUT【英文标题】:How to allow POST, PUT on IIS 8.x or higher for both localhost and remote 【发布时间】:2017-01-19 05:41:41 【问题描述】:我的 $http.POST() 使用 Angular 1.5,一切正常,但我不断收到此错误:
**GENERAL**
Request URL:http://localhost/ThingBlu/OmniGrow/js/json/logged-users.json
Request Method:POST
Status Code:405 Method Not Allowed
Remote Address:[::1]:80
**Response Headers**
Allow:GET, HEAD, OPTIONS, TRACE
Cache-Control:private
Content-Length:5448
Content-Type:text/html; charset=utf-8
Date:Sun, 11 Sep 2016 18:08:27 GMT
Server:Microsoft-IIS/10.0
X-Powered-By:ASP.NET
**Request Headers**
Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8
Authorization:Basic OWFjMTIwMTAtNjhmZC00YTY4LWIxMTQtMTI3NjcyYmRkMmNkOjRmOGJkMDg0LTY2NDQtNDVmMi1iNGI4LWI4OTgwNzgyMDkzZA==
Connection:keep-alive
Content-Length:305
Content-Type:application/json;charset=UTF-8
Cookie:XDEBUG_SESSION=XDEBUG_ECLIPSE; ASPSESSIONIDQARBBSBC=LGJPEMMBPPMIKGAEMPOKDDKP; ASPSESSIONIDQAQBBRDC=HNLHMCECDLFMFBMOFMNFNNEA; ASPSESSIONIDSARCBSBD=DMGPJIECDOKINIEIIADELBOG; ASPSESSIONIDSCQBCQCD=HHHNEBHCACCJABGNFAMFHNAD; ASPSESSIONIDQATBARBD=KFNLJLHCMOECJOMCDDOFBINL; ASPSESSIONIDQCSABTAC=GDGJMOMCNPDBJAAOKJJHDDGH
DNT:1
Host:localhost
Origin:http://localhost
Referer:http://localhost/ThingBlu/OmniGrow/index.html
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36
问题来了:
我的 WebConfig 文件有以下内容:
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
每当我单步执行下面的代码并点击特定部分时,就会发生上述错误。
我正在写入本地 JSON 文件,这是我在 Frontier Communications 工作时成功完成的。这很可能让大多数帖子感到懊恼,说它不是。我已经做到了,FRONTIER 和 T-MOBILE 也是如此。话虽如此,这是我的 ANGULAR 代码:
/**
* Then log the person in
* @returns object through promises
*/
ctrlLogin.fetchLogin = function ()
//SUBMIT FORM
$scope.submit = function ()
console.log('Submit Clicked');
//Encode Password if FormData is VALID
if ($scope.formData)
formObj =
uid: $scope.formData.myusername,
pwd: $scope.encode64($scope.formData.mypassword),
rmbr: $scope.formData.rememberme
;
//Login Data
loginData.svc.getLoginData(formObj).then(function (result)
console.log("Login message: ", result);
//if success send the person through
if (result.data.message === "failure")
console.log("ERROR: ", result.data.message);
$scope.changeRoute("/error");
else
console.log("SUCCESS: ", result.data);
//Get Path to JSON
$http.get(SVCURLS.data.loggedusers).then(function (data)
//SUCCESS so therefore pass ACTIVE = 1 for DASHBOARD as that's
//where we're going next.
if (appservice.appFuncs.saveToJson(result.data, 1))
data.users = angular.toJson(result.data);
//use $.param JQUERY function to serialize the data from JSON
$scope.users = $.param(data.users);
//CONFIG using HEADERS
var config = HEADERS.tokenheaders;
**//NOTE: THIS IS THE POINT AT WHICH THE 405 ERROR OCCURS**
$http.post(SVCURLS.data.loggedusers, data.users, status, config)
.success(function (data, status, headers, config)
//SUCCESS CALBACK
$scope.PostDataResponse = data;
console.log("SUCCESS Writing to JSON FILE!");
window.location.href = "main-page.html";
)
.error(function (data, status, headers, config)
//FAILURE CALLBACK
$scope.PostDataResponse = "DATA: " + data +
"<hr/>Status: " + status +
"<hr/>Headers: " + headers +
"<hr/>Config: " + config;
console.log("ERROR Writing to JSON FILE");
return deferred.reject(data ? data : '[NO DATA]');
);
else
//ERROR show what happened
console.log("ERROR: ", data);
//Now flip the pages that the session has been
//Created
$scope.msg = "There was an error saving your information.";
deferred.reject(data ? data : '[NO DATA]');
);
);
return "intial load";
;
;
ctrlLogin.fetchLogin();
我们将不胜感激。谢谢。
【问题讨论】:
【参考方案1】:可能是其他模块(不是 WebDAV)有冲突的动词过滤器。 您可以尝试查看 iis config 文件夹中 applicationHost.config 文件的内容。可疑模块是具有相同路径和相似动词的模块。例如,如果某个模块 X 在 IIS 管理控制台中为您的应用程序禁用,但在 applicationHost.config 中定义了匹配的路径/动词过滤器,则它的处理程序仍将作为请求管道的一部分被调用,并且该模块将生成405 状态。 如果您发现任何冲突的模块,您可以将它们从管道中删除,类似于您在 web.config 文件中为 WebDAV 执行的操作。
【讨论】:
以上是关于如何在 IIS 8.x 或更高版本上允许本地和远程的 POST、PUT的主要内容,如果未能解决你的问题,请参考以下文章
如何使使用旧 Java 版本开发的应用程序在 jdk 9 或更高版本上运行? [复制]
如何在 xCode 4 或更高版本中添加或连接两个项目,例如一个项目
解决IIS发布网站出现"System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本"的问题