2016-06-07 77 views
1

我試圖讓CORS在一個asp.net web api中設置。我WebApiConfig.cs是:CORS和ASP.Net Web API

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web.Http; 
using System.Web.Http.Controllers; 
using System.Web.Http.Cors; 
using System.Web.Http.Routing; 

namespace WebApplication2 
{ 
public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.MapHttpAttributeRoutes(); 
     var cors = new EnableCorsAttribute("http://localhost", "*", "*"); 

     config.EnableCors(cors); 
     config.Routes.MapHttpRoute(
      name: "bootstrap", 
      routeTemplate: "abp/{controller}" 
     ); 
    } 
} 
} 

我也有我的控制器,這是附加標題:

namespace WebApplication2.Controllers 
{ 
public class BootStrapController : ApiController 
{ 
    public void Options(string locale, string deviceType) 
    { 
     string origin = HttpContext.Current.Request.Headers.Get("Origin") ??          ""; 
     HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", origin); 
     HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Methods", HttpContext.Current.Request.Headers["Access-Control-Request-Methods"]); 
     HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Headers", HttpContext.Current.Request.Headers["Access-Control-Request-Headers"]); 
     HttpContext.Current.Response.End(); 
    } 
    public object Get(string locale, string deviceType) 
    { 
     string origin = HttpContext.Current.Request.Headers.Get("Origin") ?? ""; 
     HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", origin); 

然而,我沒有在服務器響應任何訪問控制或任何附加頭。如果您需要更多信息,請告訴我。

回答

1

請訪問http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api。你將得到一個在WebAPI中實現CORS的完整指南。

UPDATE: 要實現的WebAPI CORS請遵循以下步驟:

  1. 添加CORS NuGet包在您的解決方案。在Visual Studio中,從工具菜單中選擇庫包管理器,然後選擇程序包管理器控制檯。在包管理控制檯窗口中,輸入以下命令:
    安裝-封裝Microsoft.AspNet.WebApi.Cors

  2. 打開文件App_Start/WebApiConfig.cs。將以下代碼添加到WebApiConfig.Register方法中。

    public static class WebApiConfig 
    { 
        public static void Register(HttpConfiguration config) 
        { 
        // New code 
        config.EnableCors();  
        } 
    } 
    
  3. 接下來,添加[EnableCors]歸因於BootStrapController類:

    [EnableCors(origins: "*", headers: "*", methods: "*")] 
    public class BootStrapController : ApiController 
    { 
        // Controller methods 
    } 
    

    起源,標頭和方法可以根據自己的需要而有所不同。

+0

請在您的回答中添加更多詳情。鏈接只有答案不是一件好事。如果鏈接中斷,答案將失效。 – Yogi

0

以前的答案是正確的,但如果要啓用CORS在所有的控制器,你可以做一個非常簡單的方法:在WebApiConfig類中,Register方法內,加接下來的兩行:

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // These next two lines enables CORS for all controllers 
     var cors = new EnableCorsAttribute("*", "*", "*"); 
     config.EnableCors(cors); 
    } 
}