Как маршрут все другие, чем веб-API /index.html

Я'вэ работал на автор проекта, внутри ASP.NET MVC с помощью веб-API. Он отлично работает за исключением при попытке перейти непосредственно к угловой маршрутизации URL-адрес или обновите страницу. А не баловался с настройки сервера, я думал, что это будет то, что я справлюсь с в MVC's двигатель маршрутизации.

Текущая WebAPIConfig:

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

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional },
            constraints: new { id = @"^[0-9]+$" }
        );

        config.Routes.MapHttpRoute(
            name: "ApiWithActionAndName",
            routeTemplate: "api/{controller}/{action}/{name}",
            defaults: null,
            constraints: new { name = @"^[a-z]+$" }
        );

        config.Routes.MapHttpRoute(
            name: "ApiWithAction",
            routeTemplate: "api/{controller}/{action}",
            defaults: new { action = "Get" }
        );
    }
}

Текущая RouteConfig:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute(""); //Allow index.html to load
        routes.IgnoreRoute("partials/*"); 
        routes.IgnoreRoute("assets/*");
    }
}

Нынешний Глобальный.эйсакс.в CS:

public class WebApiApplication : HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        var formatters = GlobalConfiguration.Configuration.Formatters;
        formatters.Remove(formatters.XmlFormatter);
        GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings
        {
            Formatting = Formatting.Indented,
            PreserveReferencesHandling = PreserveReferencesHandling.None,
            ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
        };
    }
}

Цель:

/по API/ продолжает идти в веб-API, /частичные/, и /активов/* все идут к файловой системе, абсолютно все остальное будет направлено в /index.html это мое угловые одном приложении страницы.

--Редактирование--

Мне кажется, это работает. Добавил его в дно RouteConfig.в CS:

 routes.MapPageRoute("Default", "{*anything}", "~/index.html");

И это изменение в корень веб.конфиг:

<system.web>
...
  <compilation debug="true" targetFramework="4.5.1">
    <buildProviders>
      ...
      <add extension=".html" type="System.Web.Compilation.PageBuildProvider" /> <!-- Allows for routing everything to ~/index.html -->
      ...
    </buildProviders>
  </compilation>
...
</system.web>

Однако, это больше похоже на хак. Какой-нибудь лучший способ сделать это?

Комментарии к вопросу (2)
Решение

Использовать сегмент подстановки:

routes.MapRoute(
    name: "Default",
    url: "{*anything}",
    defaults: new { controller = "Home", action = "Index" }
);
Комментарии (4)

Предлагаю более ответственного подхода






Комментарии (4)

в моем случае ни один из этих подходов не работал. я застрял в 2 сообщение об ошибке в ад. ни этого типа страница не служил или какой-то 404.

ЧПУ работал:
















    ...

заметьте, я обнаружила на [а-Яа-я], потому что я Дон'т хотите переписать любой из .Яш .карта и URL-адресов.

это работало в vs по окно, но в IIS может потребоваться установка URL-адреса переписать https://www.iis.net/downloads/microsoft/url-rewrite модуль

Комментарии (1)

У меня был такой же подход как в ответы, но если кто-то делает вызов API неправильно, они'll итоге получаем, что индексная страница, а что-то более полезное.

Поэтому я'вэ обновлены мои такие, что оно вернется мой индекс страницы для любого запроса не начиная с /по API:

        //Web Api
        GlobalConfiguration.Configure(config =>
        {
            config.MapHttpAttributeRoutes();
        });

        //MVC
        RouteTable.Routes.Ignore("api/{*anything}");
        RouteTable.Routes.MapPageRoute("AnythingNonApi", "{*url}", "~/wwwroot/index.html");
Комментарии (1)

Ну, я просто удалил RouteConfig.RegisterRoutes(Таблица.Маршруты); призыв в мировой.эйсакс.в CS и теперь все URL-адреса, которые я ввожу, если ресурс существует, то он будет подан. Даже на страницах справки по API по-прежнему работает.

Комментарии (2)