ASP .NET WebAPI无法访问路由

时间:2015-11-03 16:49:44

标签: c# asp.net post asp.net-web-api cors

我有一个基本的ASP .NET WebAPI项目。有一个PdfFileController

[RoutePrefix("api/pdffile")]
public class PdfFileController : ApiController
{
    [HttpPost]
    [Route("upload")]
    public async Task<dynamic> Upload(dynamic uploadedData)
    {
        List<object> files = uploadedData.pdfs;
        // ...
    }
}

在客户端,我使用Oboe发送了POST请求:

oboe({
    url: this.props.configuration.rootApiUrl + 'pdffile/upload',
    method: 'POST',
    body: { pdfs: pdfs }
}).node('pdfsAsImages.*', function(pdf){ // This callback will be called every time a new pdf image comes in
    channel.pub('pdf.converted', pdf);
});

POST请求网址解析为http://localhost:49706/api/pdffile/upload。根据此请求,我收到此消息:

  

选项http://localhost:49706/api/pdffile/upload

     

XMLHttpRequest无法加载http://localhost:49706/api/pdffile/upload。   对预检请求的响应没有通过访问控制检查:否   &#39;访问控制允许来源&#39;标题出现在请求的上   资源。起源&#39; null&#39;因此不允许访问。响应   有HTTP状态码405。

我的静态html和js文件是从localhost:8000的本地简单python文件服务器提供的。

使用Postman点击http://localhost:49706/api/pdffile/upload会返回:

  

{     &#34;消息&#34;:&#34;请求实体的媒体类型&#39; multipart / form-data&#39;此资源不支持。&#34;,     &#34; ExceptionMessage&#34;:&#34;没有MediaTypeFormatter可用于读取&#39;对象&#39;来自媒体类型的内容&#39; multipart / form-data&#39;。&#34;,     &#34; ExceptionType&#34;:&#34; System.Net.Http.UnsupportedMediaTypeException&#34;,     &#34; StackTrace&#34;:&#34; at System.Net.Http.HttpContentExtensions.ReadAsAsync [T](HttpContent内容,Type类型,IEnumerable`1格式化程序,IFormatterLogger formatterLogger,CancellationToken cancellationToken)\ r \ n在System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage请求) ,Type type,IEnumerable`1 formatters,IFormatterLogger formatterLogger,CancellationToken cancellationToken)&#34;   }

所以这里可能会有几个问题。我的问题是我该怎样做才能克服&#34; No&#39; Access-Control-Allow-Origin&#39;标题存在&#34;问题?在我看来,它与拥有多个服务器有关,一个用于静态文件服务,一个用于路由。我想保持这种设置。

1 个答案:

答案 0 :(得分:2)

要允许CORS(跨域请求),请尝试在webapiconfig.cs / Register

中指定
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        var cors = new EnableCorsAttribute("www.example.com", "*", "*");
        config.EnableCors(cors);
        // ...
    }
}

这需要Microsoft.AspNet.Cors NuGet包。