【问题标题】:ASP .NET WebAPI can't access routeASP .NET WebAPI 无法访问路由
【发布时间】: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


【解决方案1】:

要允许 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 包。

【讨论】:

    猜你喜欢
    • 2018-12-11
    • 2016-02-05
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    相关资源
    最近更新 更多