嘿,我已经为我的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

所以我不确定我错过了什么或者可能是错误配置的 .

任何帮助解决这个问题都会很棒!