Asp.net mvc хостинг угловое приложение с html5mode и маршрутизацией

Хорошо, я размещаю angularjs внутри asp.net mvc 5 и использую html5mode(true) в моем угловом приложении, чтобы избавиться от всех хэш-знаков в URL. Однако все отлично работает с моей текущей настройкой, которая выглядит следующим образом:

RouteConfig.cs:

        routes.MapRoute(
            name: "Default",
            url: "app/{angular}",
            defaults: new { controller = "Ng", action = "Index", angular= UrlParameter.Optional }
        );

Так что когда я перейду к http://url/app/myangularroute мое действие Ng/Index возвращает представление, которое содержит контейнер ng-view, и угловое приложение теперь активно и работает с предоставленным маршрутом

Теперь моя проблема здесь, когда я перехожу к http://url/app/ он возвращает ошибку dir listning допускается, которую я не могу понять. Не должно ли быть возвращено мое индексное действие, поскольку угловой параметр установлен на необязательный?

И могу ли я как-то полностью избежать "приложения" и при этом заставить мое угловое приложение работать? Я пробовал некоторые правила перезаписи, но это дает мне много ошибок, потому что я использую функциональность объединения и минимизации mvc.

Я мог бы жить с URL, являющимся форматом, в котором он находится в настоящее время, но без необходимости предоставлять необязательный параметр, например http://url/app/

Кроме того, это всего лишь угловое приложение, никакого другого представления mvc, кроме оболочки index.cshtml.

Этот парень, кажется, заставляет его работать, но я не могу видеть его маршруты MVC

6 ответов

Решение

Попробуйте добавить это в ваш web.config sytem.webserver Настройки.

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
<system.webServer>

РЕДАКТИРОВАТЬ:

Попробуйте изменить свой RouteConfig.cs, например так:

    routes.MapRoute(
        name: "Default",
        url: "app/{*.}",
        defaults: new { controller = "Ng", action = "Index" }
    );

EDIT2:

Я полностью забыл об этом вопросе, но теперь я только что понял, что, возможно, проблема в том, что вы не настроили свой IIS Server для работы с Html5Mode, взгляните на это: https://github.com/angular-ui/ UI-маршрутизатор / вики / Часто задаваемые вопросы #-как конфигурируемый-ваш-сервер-работа-с-html5mode

Конкретно эта часть:

Azure IIS переписывает:

<system.webServer>
  <rewrite>
    <rules> 
      <rule name="Main Rule" stopProcessing="true">
        <match url=".*" />
        <conditions logicalGrouping="MatchAll">
          <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />                                 
          <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        </conditions>
        <action type="Rewrite" url="/" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>

Я надеюсь, что это помогает.

Это моё решение. Я использую ASP.NET MVC + Web API. ASP.NET MVC всегда возвращает одну и ту же HTML-страницу для любого URL, поэтому AngularJS может вступить во владение в $ locationProvider.html5Mode (true);

RouteConfig.cs

  routes.MapRoute(
      name: "Default",
      url: "{*anything}",
      defaults: new
      {
        controller = "Home",
        action = "Index",
      }
  );

WebApiConfig.cs

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

HomeController.cs

public ActionResult Index()
{
    return File("~/index.html", "text/html");
}

Хорошо, я получил это на работу.

Делая это:

  1. Удалите маршрут "app" полностью и используйте стандартный маршрут.
  2. Добавить правило перезаписи
  3. Удалите основную ссылку из макета

О, вау, я отключил пакетирование и минификацию, вот что на самом деле и заставило его работать. Когда я включаю его, я получаю угловую ошибку.

Честно говоря, я думал, что попробовал это 10 раз безуспешно. Это начало показывать признаки работы, когда я удалил основание HREF.

Старый вопрос, но все еще в силе, это мое решение:

<rewrite>
  <rules>
    <rule name="Main Rule" stopProcessing="true">
      <match url=".*"/>
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        <!--for local dev enviroment-->
        <add input="{REQUEST_URI}" pattern="^/(__browserLink)" negate="true" />
        <!--if the url does not match a valid file we don't want it to be redirected to the index page-->
        <add input="{REQUEST_URI}" pattern="\.(png|jpg|gif|css|js|html)$" negate="true" />
        <!--web api route-->
        <add input="{REQUEST_URI}" pattern="^/api/" negate="true" />
        <!--ASP.NET Web API Help Page-->
        <add input="{REQUEST_URI}" pattern="^/Help" negate="true" />
        <!--Swagger-->
        <add input="{REQUEST_URI}" pattern="^/apimap" negate="true" />
      </conditions>
      <action type="Rewrite" url="/" />
    </rule>
  </rules>
</rewrite>

На моем сайте ASP.NET 5 RC - с WebAPI, но не с MVC - было решено использовать правило перезаписи по умолчанию в файле wwwroot\web.config system.webserver тег:

<rewrite>
  <rules>
    <clear />
    <rule name="API" stopProcessing="true">
      <match url="^(api)(.*)$" />
      <action type="None" />
    </rule>
    <rule name="Main Rule" stopProcessing="true">
      <match url=".*" />
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      </conditions>
      <action type="Rewrite" url="/" />
    </rule>
  </rules>
</rewrite>

Я сталкиваюсь с той же проблемой, я установил базовый HREF в layout.cshtml, поместил правило перезаписи webconfig, при загрузке приложения, В конфигурации пакета я установил все сценарии и CSS при запуске приложения, он не загружается, непредвиденная синтаксическая ошибка <отображается в консоли.

Когда я удаляю правило и базовый HREF и поставщик местоположения ложный, он работает нормально.

Angular Js Странная проблема Ui Router Html5mode включил проблему обновления страницы в mvc 500 error

Другие вопросы по тегам