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");
}
Хорошо, я получил это на работу.
Делая это:
- Удалите маршрут "app" полностью и используйте стандартный маршрут.
- Добавить правило перезаписи
- Удалите основную ссылку из макета
О, вау, я отключил пакетирование и минификацию, вот что на самом деле и заставило его работать. Когда я включаю его, я получаю угловую ошибку.
Честно говоря, я думал, что попробовал это 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 и поставщик местоположения ложный, он работает нормально.