#c# #asp.net #asp.net-mvc-4 #visual-studio-2013
#c# #asp.net #asp.net-mvc-4 #visual-studio-2013
Вопрос:
Шаблон SPA по умолчанию в ASP.NET , в Visual Studio 2013 предоставляет нам шаблон веб-сайта по умолчанию. Однако этот шаблон не позволяет просматривать страницу /Home/Index и автоматически перенаправляет на /Account/Login . Теперь я хочу использовать эту приятную функцию, но не на своей домашней странице.
Я попробовал следующее:
- комментирование атрибута авторизации
- добавление AllowAnonymous, переопределение аутентификации и т. Д. Один за другим.
//[Authorize]
[AllowAnonymous]
[OverrideAuthentication]
public class HomeController : Controller
{
[OverrideAuthentication]
[AllowAnonymous]
public ActionResult Index()
{
return View();
}
}
Но он все равно перенаправляет меня на
всякий раз, когда я захожу в
Как я могу это предотвратить?
Комментарии:
1. Я нашел способ, но я уверен, что это неправильный способ, прокомментируйте эту строку в app.viewmodel.js : окно. location = «/Account/Authorize?client_id=webamp;response_type=tokenamp;state=» encodeURIComponent(окно. location.hash); Если у кого-нибудь есть лучшее решение, я бы тоже хотел знать!
Ответ №1:
Сначала удалите атрибут авторизации из домашнего контроллера
//[Authorize]
public class HomeController : Controller
Затем в /Views/Home/Index.cshtml удалите логику SPA (я ее прокомментировал):
@section SPAViews {
@Html.Partial("_Home")
}
@section Scripts{
@*
@Scripts.Render("~/bundles/knockout")
@Scripts.Render("~/bundles/app")
*@
}
По сути, то, что вы делаете, — это превращаете домашнюю страницу в обычную старую страницу MVC, что, я предполагаю, вы хотите сделать.
Затем вы можете перейти по ссылке на новую страницу, на которой будет размещено ваше приложение SPA (и потребуется, чтобы пользователь вошел в систему).
Ответ №2:
В вашем контроллере:
//[Authorize]
public class HomeController : Controller
В вашей модели представления нокаута
app.addViewModel({
name: "Home",
bindingMemberName: "home",
factory: HomeViewModel,
// add this line only if you require authorization, remove or set to false in your home view model
authorize: true
});
И, наконец, в вашей модели представления приложения:
self[options.bindingMemberName] = ko.computed(function () {
if (options.authorize amp;amp; !dataModel.getAccessToken()) {
...
}
return self.Views[options.name];
});
Комментарии:
1. Определенно забыл проверить пакет нокаута. Спасибо за ответ!