添加MVC应用程序后,Azure移动应用程序表控制器不再工作

时间:2018-09-18 03:13:36

标签: asp.net-mvc-4 azure-mobile-services

我有一个用Xamarin.Forms编写的移动应用程序,它连接到Azure移动应用程序后端。我建立并运行了所有表控制器并启用了联机/脱机访问的应用程序。然后,我将注意力转向编写打算用MVC编写代码的后端网站。我按照Adrian Hall的出色著作中的here的指示进行操作,将现有的Azure移动应用程序实例添加到MVC网站。

现在,MVC站点正常运行,但是我的移动应用程序表控制器都无法正常工作。当我尝试使用GET all请求中的一个时,收到“服务器错误'/'应用程序。找不到资源”。我收到的特定http异常消息是“找不到路径{table path}的控制器或未实现IController。”

我相信我可能必须修改“ RouteConfig.cs”文件?但这只是一个猜测,我尝试过的不同组合均未成功。谁能指出我需要使用默认的“ / tables / {tablename}”模式和MVC“ {controller} / {action} / {id}”模式来支持移动应用程序的应用程序中需要修改的内容吗? >

注意,我已经在stackoverflow和google上进行了广泛的搜索,但是没有找到这个具体问题的答案。如果在线上已经存在答案,我将不胜感激。

using azure mobile services with MVC application-此问题和答案没有帮助,因为我没有将ApiController用于自定义API,而是使用Azure移动服务中的默认TableController。

Extend Azure Mobile Service: add MVC and new routes-如该答案所述,我使用的是Azure移动应用程序,而不是Azure移动服务SDK。我还尝试了使用“ .UseDefaultConfiguration()”修改Startup.MobileApp.cs以及无用的默认配置的各种组合的建议。

Adding an asp.net MVC page along with Azure Mobile services-此答案中的任何建议都没有解决我上面的问题。

我还尝试注释掉global.asax.cs文件中的所有内容-使我回到默认的“您的App服务应用程序已启动并正在运行”页面,而不是我的新MVC主页。 / tables / {tablename} GET仍然返回404 not found错误。

我相信所有相关代码都在此处发布。如果我错过了什么,请告诉我。

Startup.cs

public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            ConfigureMobileApp(app);
        }
    }

Startup.MobileApp.cs

public partial class Startup
    {
        public static void ConfigureMobileApp(IAppBuilder app)
        {
            var httpConfig = new HttpConfiguration();
            var mobileConfig = new MobileAppConfiguration();

            mobileConfig
                .AddTablesWithEntityFramework()
                .ApplyTo(httpConfig);

            httpConfig.MapHttpAttributeRoutes();

            app.UseWebApi(httpConfig);

            Database.SetInitializer<MobileServiceContext>(null);
         }
      }

RouteConfig.cs

public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.IgnoreRoute("wcf/{resource}.svc/{*pathInfo}");
            routes.IgnoreRoute("wcf/{resource}.svc");
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

            AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;
        }
    }

Global.asax.cs

public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }

        public static void Register(HttpConfiguration config)
        {
            // Web API routes
            config.MapHttpAttributeRoutes();

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

0 个答案:

没有答案