2013-05-03 41 views
1

所以,當我發送文件到MVC控制器,但這個Kendo UI上傳運行良好,但我必須改變它,並直接發送到API控制器,但它失敗。ASP.Net MVC異步文件上傳到API與Kendo失敗

這是劍道上傳初始化代碼:

$("#files").kendoUpload({ 
    async: { 
    saveUrl: "@WebApiHelper.GetUrl("Notification/UploadFile")", 
    removeUrl: "remove", 
    autoUpload: true 
    }, 
    success: function(), 
    error: function() 
} 

在Chrome控制檯它顯示Load Canceled在網絡選項卡中的請求的狀態文本:

enter image description here

請求的結果如下所示:

Request URL:http://localhost:45706/api/Notification/UploadFile 
Request Method:OPTIONS 
Status Code:200 Ok 

Request Headers 
Accept:*/* 
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4 
Access-Control-Request-Headers:origin, content-type 
Access-Control-Request-Method:POST 
Host:localhost:45706 
Origin:http://localhost:1654 
Proxy-Connection:keep-alive 
Referer:http://localhost:1654/ 
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31 

Response Headers 
Access-Control-Allow-Credentials:true 
Access-Control-Allow-Headers:origin, accept, content-type 
Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS 
Access-Control-Allow-Origin:* 
allow-access-from domain:* 
Cache-Control:no-cache 
Content-Length:0 
Date:Fri, 03 May 2013 16:53:30 GMT 
Expires:-1 
Pragma:no-cache 
Server:Microsoft-IIS/8.0 
X-AspNet-Version:4.0.30319 
X-Powered-By:ASP.NET 
X-SourceFiles:=?UTF-8?B?QzpcVXNlcnNcR0F0ZWNcRG9jdW1lbnRzXEdBdGVjXE9kaXNzZWlhXEFwcGxpY2F0aW9uXEdBdGVjLkFncm9XZWIuQ29yZVxHQXRlYy5BZ3JvV2ViLkNvcmUuQVBJXGFwaVxOb3RpZmljYXRpb25cVXBsb2FkRmlsZQ==?= 

請注意,狀態碼是200,因爲我在方法中返回了它。因此,它達到API方法...

[HttpPost][HttpOptions] 
public HttpResponseMessage UploadFile(HttpPostedFileBase files) 

...但files參數跳投null

這是API webconfig文件CORS相關屬性:

<httpProtocol> 
    <customHeaders> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    <add name="allow-access-from domain" value="*" /> 
    <add name="Access-Control-Allow-Headers" value="origin, accept, content-type" /> 
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> 
    <add name="Access-Control-Allow-Credentials" value="true" /> 
    </customHeaders> 
</httpProtocol> 

有什麼想法?任何幫助將非常感激!

+0

您的文件參數應該是IEnumerable 文件 – HaBo 2013-05-03 18:45:39

+0

本文解決了CORS問題:[http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/20/implementing-cors-support-在-ASP淨網頁apis.aspx(http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/20/implementing-cors-support-in-asp-net-web-apis .aspx) – DontVoteMeDown 2013-06-06 12:58:34

回答

0

此代碼適用於我。

public ActionResult Document_Create([DataSourceRequest] DataSourceRequest request, Customer obj, IEnumerable<HttpPostedFileBase> Docs) 
     { 
        foreach (var Doc in Docs) 
        { 
         string newFileName = Path.GetFileName(Doc.FileName).Replace(" ",""); //Guid.NewGuid().ToString() + Path.GetExtension(Doc.FileName); 
         var physicalPath = Path.Combine(Server.MapPath("~/Documents/"), newFileName); 
         Doc.SaveAs(physicalPath); 

        } 
      return Json(new[] { obj }.ToDataSourceResult(request, ModelState)); 
     } 
+0

這也適用於我,但它必須在MVC前端級別上使用,而不是在後端級別上使用,就像我想要的那樣。我對嗎? – DontVoteMeDown 2013-05-03 20:46:18

+0

@DontVoteMeDown你是什麼意思的MVC前端? – HaBo 2013-05-03 21:45:25

+0

@DontVoteMeDown我得到你的問題,檢查你的API控制器的路由配置。這也應該與API控制器一起工作。 – HaBo 2013-05-03 21:56:20