2015-11-03 44 views
3

我有一個基本的ASP .NET WebAPI項目。有一個PdfFileControllerASP .NET WebAPI無法訪問路線

[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。從這個請求,收到此消息:

OPTIONS http://localhost:49706/api/pdffile/upload

的XMLHttpRequest不能加載http://localhost:49706/api/pdffile/upload。 對預檢請求的響應未通過訪問控制檢查:否 請求的 資源上存在「訪問控制 - 允許來源」標頭。因此不允許原產地'null'訪問。響應 了HTTP狀態碼405

我的靜態HTML和JS文件被從本地簡單的python文件服務器提供的位於localhost:8000。

擊中http://localhost:49706/api/pdffile/upload與郵差返回此:

{ 「消息」:「請求實體的媒體類型‘多部分/格式數據’不支持該資源。」, 「ExceptionMessage」: 「沒有MediaTypeFormatter可用於從媒體類型爲'multipart/form-data'的內容讀取'Object'類型的對象。」, 「ExceptionType」:「System.Net.Http.UnsupportedMediaTypeException」, 「StackTrace」:「在System.Net.Http.HttpContentExtensions.ReadAsAsync [T](HttpContent內容,類型類型,IEnumerable`1格式化程序,IFormatterLogger formatterLogger,CancellationToken的CancellationToken個)\ r \ n在System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage請求,類型類型,IEnumerable`1格式化,IFormatterLogger formatterLogger,的CancellationToken的CancellationToken)」 }

所以可能有幾個這裏發生的問題。我的問題是我必須做些什麼來克服「否」訪問控制 - 允許來源'標題存在'的問題?在我看來,它與多個服務器有關,一個用於靜態文件服務,另一個用於路由。我想保持這個設置。

+0

您可能希望在服務器應用程序上啓用[啓用CORS](http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api)。 –

回答

2

允許CORS(跨域請求)嘗試在指定的webapiconfig.cs /註冊

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

這需要Microsoft.AspNet.Cors NuGet包。