VS2013 ASP.. NET MVC单页应用模板自动重定向

本文关键字:重定向 应用 ASP NET MVC 单页 VS2013 | 更新日期: 2023-09-27 18:09:05

ASP中默认的SPA模板。. NET在Visual Studio 2013中为我们提供了一个默认的网站模板。但是,此模板不允许看到/Home/Index页,并自动重定向到/Account/Login。现在,我确实想使用这个不错的功能,但不是在我的主页上。

我已经试过了:

  1. 注释掉Authorize属性
  2. 逐个添加AllowAnonymous, OverrideAuthentication等。
//[Authorize]
[AllowAnonymous]
[OverrideAuthentication]
public class HomeController : Controller
{
    [OverrideAuthentication]
    [AllowAnonymous]
    public ActionResult Index()
    {
        return View();
    }
}

但是它仍然将我重定向到

http://example.com: 49838/账户/登录? ReturnUrl = % 2 faccount % 2 fauthorize % 3 fclient_id % 3 dweb % 26 response_type % 3 dtoken % 26州% 3 d

每当我去

http://example.com: 49838/Home/指数

我该如何预防呢?

VS2013 ASP.. NET MVC单页应用模板自动重定向

首先,移除Home控制器的Authorize属性

//[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应用程序(并要求用户登录)。

在你的控制器中:

//[Authorize]
public class HomeController : Controller

在knockout视图模型中

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 
});

最后在app视图模型中:

self[options.bindingMemberName] = ko.computed(function () {
    if (options.authorize && !dataModel.getAccessToken()) {
        ...
    }
    return self.Views[options.name];
});