【发布时间】:2015-11-26 16:35:41
【问题描述】:
问题
每当我尝试向我的 WCF 服务(在 IIS 上本地运行)发送 POST 请求时,我都会得到:
访问被拒绝
我的 WCF 配置(仅相关代码)
我添加了以下内容以允许使用不同的方法,并且我能够从 Request Method: 'GET' 获取信息,但不能从 POST 获取信息
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*"/>
<add name="Access-Control-Allow-Headers" value="Content-Type, Accept" />
<add name="Access-Control-Allow-Methods" value="GET,POST,DELETE" />
<add name="Access-Control-Max-Age" value="1728000" />
</customHeaders>
</httpProtocol>
Ajax 调用
这是我的 ajax 调用,每当我尝试创建一个新的'Project'
$.ajax({
url: baseAddress + "projects/create",
type: 'POST',
contentType: "application/json; charset=utf-8",
data: JSON.stringify({
'Title': 'Test Title',
'Customer': {
'Name': 'Test Name'
}
})
})
服务实现
这是IService.cs 与UriTemplate 和Method = 'POST'
[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, UriTemplate = "/projects/create")]
int CreateProject(ProjectDTO project);
额外信息
每当我通过谷歌浏览器查看标题时,我看到Request Method 是OPTIONS 和响应Access-Control-Allow-Methods: GET, POST, DELETE,但我仍然无法发出POST 请求(请参阅this)。
如何在 WCF 服务中正确处理请求方法OPTIONS?
编辑
好笑的是回复说:Access-Control-Allow-Methods: GET, POST, etc.,意思是既然请求问的是:Access-Control-Request-Method: POST,就应该允许发送这个请求,但是不知什么原因我得到了这个Access Denied
编辑 2
我知道Request Method: OPTIONS,但OPTIONS 询问我的服务是否允许执行POST 请求,服务回复Access-Control-Allow-Methods: GET, POST, etc. 那里说POST 是允许的。
【问题讨论】:
-
“Access-Control-Allow-Headers”不应该包含“Accept, Content-Type, Origin”(缺少 Origin)吗?
-
@UncleRico 无论如何都没有任何区别:)
-
你的标题看起来应该是这样的。您是否尝试过在项目/创建控制器中使用手动标题覆盖 [ie: Response.AppendHeader(...)] ?
-
我不确定你的意思?能详细点吗?
-
喜欢这里:enable-cors.org/server_aspnet.html。你能把你的 C:\Windows\System32\LogFiles\HTTPERR\httperr.log 的副本从 172.20.40.125 服务器放在这里吗?标题可能根本不是问题,而是项目/创建控制器中的一段代码。
标签: c# asp.net wcf http-headers httprequest