1. 程式人生 > >webapi跨域訪問cors

webapi跨域訪問cors

success bsp uget mvc bag cti host register value

新建mvc和webapi應用程序,對應的域名和端口號分別是:http://localhost:24101/ 和 http://localhost:24159/

在webapi項目的values控制器中添加測試接口GetStatus如下:

namespace WebApiCors.Controllers
{
    [Authorize]
    public class ValuesController : ApiController
    {
        [HttpGet]
        [AllowAnonymous]
        public string GetStatus()
        {
            
return "ok"; } }

配置webapi的路由:

namespace WebApiCors
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API 配置和服務
            // 將 Web API 配置為僅使用不記名令牌身份驗證。
            config.SuppressDefaultHostAuthentication();
            config.Filters.Add(
new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); // Web API 路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults:
new { id = RouteParameter.Optional } ); } } }

mvc項目修改Home控制器下的Index視圖,如下

@{
    ViewBag.Title = "Home Page";
}

<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
    $(function () {
        $.ajax({
            url: "http://localhost:24159/api/Values/GetStatus",
            type: "Get",
            data: {},
            success: function (data) {
                console.log(data)
            },
            error: function () {
                console.log("fail")
            }
        });
    });
</script>

同時啟動兩個應用程序:右鍵解決方案-->屬性-->啟動多個項目,啟動之後發現mvc項目報錯,報錯信息如下,這是因為瀏覽器為了安全考慮,默認是不允許跨域訪問,當然不同瀏覽器以及相同瀏覽器不同版本可能不一樣。

技術分享圖片

下面我們對webapi應用程序做一下跨域訪問改造,使用nuget添加跨域相關引用,搜索“microsoft.aspnet.webapi.cors”,選擇第一個

技術分享圖片

然後在WebApiConfig配置跨域訪問:

namespace WebApiCors
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            //配置跨域訪問
            config.EnableCors(new EnableCorsAttribute("http://localhost:24101", "*","*"));


            // Web API 配置和服務
            // 將 Web API 配置為僅使用不記名令牌身份驗證。
            config.SuppressDefaultHostAuthentication();
            config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

            // Web API 路由
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

再次同時訪問兩個應用程序,發現mvc項目能夠訪問到webapi接口了。

參考文章:https://www.cnblogs.com/landeanfen/p/5177176.html

webapi跨域訪問cors