我有一个基本的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;问题?在我看来,它与拥有多个服务器有关,一个用于静态文件服务,一个用于路由。我想保持这种设置。
答案 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包。