【发布时间】:2016-02-03 22:29:01
【问题描述】:
我有一个基本的 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 请求 URL 解析为 http://localhost:49706/api/pdffile/upload。从这个请求中,我收到了这条消息:
选项http://localhost:49706/api/pdffile/upload
XMLHttpRequest 无法加载 http://localhost:49706/api/pdffile/upload。 对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此,Origin 'null' 不允许访问。响应 有 HTTP 状态码 405。
我的静态 html 和 js 文件由 localhost:8000 的本地简单 python 文件服务器提供。
用 Postman 打 http://localhost:49706/api/pdffile/upload 会返回:
{ "Message": "该资源不支持请求实体的媒体类型'multipart/form-data'。", "ExceptionMessage": "没有 MediaTypeFormatter 可用于从媒体类型为 'multipart/form-data' 的内容中读取类型为 'Object' 的对象。", "ExceptionType": "System.Net.Http.UnsupportedMediaTypeException", "StackTrace": " 在 System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent 内容,类型类型,IEnumerable`1 格式化程序,IFormatterLogger formatterLogger,CancellationToken cancelToken)\r\n 在 System.Web.Http.ModelBinding.FormatterParameterBinding .ReadContentAsync(HttpRequestMessage 请求, 类型类型, IEnumerable`1 格式化程序, IFormatterLogger formatterLogger, CancellationToken cancelToken)" }
所以这里可能存在几个问题。我的问题是我必须做些什么来克服“不存在'Access-Control-Allow-Origin'标头”问题?在我看来,这与拥有多台服务器有关,一台用于静态文件服务,一台用于路由。我想保持这个设置。
【问题讨论】:
-
您可能想在服务器应用程序上enable CORS。
标签: c# asp.net post asp.net-web-api cors