webapi跨域訪問cors
阿新 • • 發佈:2019-02-19
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