未使用默认的WebApiConfig,但区域MapHttpRoute在区域中。 ASP.net MVC

时间:2018-06-21 17:13:11

标签: asp.net-mvc areas

我有一个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之前吗?我以为这可以解决问题,但是对某些领域不太熟悉,也不想破坏我现有的代码。

0 个答案:

没有答案