Azure移动应用服务未获取路由

时间:2017-05-02 14:52:47

标签: c# asp.net-web-api2 azure-mobile-services

我有一个我通过File>创建的项目;新>项目> Azure移动应用

我已在HttpConfiguration方法中为ConfifgureMobileApp()添加了路线。

代码看起来像这样。特别是config.Routes.MapHttpRoute(...)行。

    private static void ConfigureMobileApp(IAppBuilder app, ContainerBuilder builder)
    {
        var config = new HttpConfiguration();
        builder.RegisterModule(new WebApiModule(config));
        var container = builder.Build();
        config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
        //For more information on Web API tracing, see http://go.microsoft.com/fwlink/?LinkId=620686 
        config.EnableSystemDiagnosticsTracing();
        config.Filters.Add(new CultureThreadingAttribute());
        config.Routes.MapHttpRoute("DefaultApi", "api/{culture}/{controller}/{id}", new { id = RouteParameter.Optional });
        new MobileAppConfiguration()
            .AddTablesWithEntityFramework()
            .MapApiControllers()
            .ApplyTo(config);
        MobileAppSettingsDictionary settings = config.GetMobileAppSettingsProvider().GetMobileAppSettings();
        if (string.IsNullOrEmpty(settings.HostName))
        {
            // This middleware is intended to be used locally for debugging. By default, HostName will
            // only have a value when running in an App Service application.
            app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions
            {
                SigningKey = ConfigurationManager.AppSettings["SigningKey"],
                ValidAudiences = new[] { ConfigurationManager.AppSettings["ValidAudience"] },
                ValidIssuers = new[] { ConfigurationManager.AppSettings["ValidIssuer"] },
                TokenHandler = config.GetAppServiceTokenHandler()
            });
        }

        app.UseAutofacWebApi(config);
        app.UseAutofacMiddleware(container);
    }

但这条路线没有被捡起来。在我的中间件中,我从OwinContext.Environment字典中获取了{System.Web.Routing.RouteData}对象,它不包含任何路由。

我正在使用https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-dotnet-backend-how-to-use-server-sdk,特别是,我通过在调用ApplyTo(config)之前映射路线来遵循该文章的建议。

此外,我的操作过滤器CultureThreadingAttribute会根据路由中的culture更改线程的区域设置,但无法获取。

我怀疑在我的应用中有多个HttpConfiguration个对象在运行。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您的文化路线和MobileApps API的路线可能相互冲突。调试路由处理程序将确认它。设置断点并在呼叫进入时查看路由表。

[MobileAppController]属性没什么神奇之处 - 它只是强制执行ZUMO-API-VERSION。您可以删除.MapApiControllers()元素,并为API控制器使用常规ASP.NET MVC路由。这将简化您的API路线定义。