嘿,我已经为我的Web API 2 Web服务安装了 Microsoft.AspNet.WebApi.Cors 5.2.3 . 但是,当我尝试 POST 到我的一个函数时,它会发生以下情况:
XMLHttpRequest无法加载http://dev.zzzz.com/david/api/FEB/theQ/ . 请求的资源上不存在“Access-Control-Allow-Origin”标头 . 因此,不允许来源“http://tst-yyyy.zzzz.com”访问 .
我不确定为什么这是因为安装CORS应该支持来自其他域的调用....
我的AJAX:
var sqlQ = "SELECT TOP 50 LTRIM(RTRIM(REPLACE(OPRID, ' ', ''))) FROM vwPS_BC_JOB_PERS_DAT WHERE OPRID != ''";
$.ajax({
type: "POST",
crossDomain: true,
dataType: 'json',
async: true,
cache: true,
contentType: "application/json",
url: "http://dev.zzzz.com/david/api/FEB/theQ/",
data: JSON.stringify({ qString: [sqlQ] }),
success: function (data) {
var obj = jQuery.parseJSON(data);
console.log(obj);
console.log(obj.query);
},
error: function (xhr, status, error) {
$("#txtResult").val(xhr.responseText);
}
});
控制器:
<HttpPost> _
Public Function theQ(dto As Dto) As String
Dim outPut As New Dictionary(Of String, String)
If dto.qString(0) <> "" Then
Try
Dim results As Object = fetchSQLQ("query", dto.qString(0))
outPut.Add("RETURN", results)
Catch ex As Exception
outPut.Add(String.Format("ERR", "{0}"), ex.Message)
End Try
Else
outPut.Add("ERROR", "no query to run...")
End If
Return JsonConvert.SerializeObject(outPut, Formatting.Indented)
End Function
Web.config文件:
<system.webServer>
<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>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
App_Start注册:
Public Sub Register(ByVal config As HttpConfiguration)
config.EnableCors(New EnableCorsAttribute("*", "*", "*"))
config.MapHttpAttributeRoutes()
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(New MediaTypeHeaderValue("text/html"))
config.Formatters.Remove(config.Formatters.XmlFormatter)
config.Formatters.JsonFormatter.MediaTypeMappings.Add(New RequestHeaderMapping("Accept", "text/html", StringComparison.InvariantCultureIgnoreCase, True, "application/json"))
config.Routes.MapHttpRoute(
name:="DefaultApi",
routeTemplate:="api/{controller}/{id}/",
defaults:=New With {.id = RouteParameter.Optional}
)
End Sub
所以我不确定我错过了什么或者可能是错误配置的 .
任何帮助解决这个问题都会很棒!