我有一个WebApiConfig.cs,在我的项目中有四个区域。
这是我的WebApiConfig.cs
public static void Register(HttpConfiguration config)
{
var enableCorsAttr = new EnableCorsAttribute(origins: "*", headers: "*", methods: "*") { SupportsCredentials = true };
config.EnableCors(enableCorsAttr);
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
每个区域都有一个RegisterArea
函数,看起来与此类似。
public override void RegisterArea(AreaRegistrationContext context)
{
context.Routes.MapHttpRoute(
name: "Finance_Api",
routeTemplate: "Finance/api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
context.MapRoute(
"Finance_default",
"Finance/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
如果用户无权访问财务区域,我想保护财务API中的某些逻辑。
但是,我有一些全局数据,并且正在多个领域使用。
我希望服务器日志中的呼叫为/api/GetDataFromGeneralArea
,但它们以/Finance/api/GetDataFromGeneralArea
的身份通过。这些调用中的一些很好,而其他一些则抛出401错误。
我不确定为什么不使用默认API?我在通话中指定了一个空或空白区域,并假设它将达到默认值。 loadUrl: '@Url.Action("Get", "GetDataFromGeneralArea", new { httproute = true, area = "" })'
我是否需要一定顺序才能正确注册?我假设在我的WebApiConfig之前先调用财务区域路由。
这是我的Global.asax.cs
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
MvcGrid.Filters.Register(typeof(InForecastType), "Equals", typeof(InForecastEqualsFilter));
MvcGrid.Filters.Register(typeof(StateType), "Equals", typeof(StateEqualsFilter));
DevExtremeBundleConfig.RegisterBundles(BundleTable.Bundles);
}
GlobalConfiguration.Configure(WebApiConfig.Register);
应该在registerAllAreas之前吗?我以为这可以解决问题,但是对某些领域不太熟悉,也不想破坏我现有的代码。