以 Hot Towel SPA 模板为例,假设我需要一个管理链接和 View ,该链接和 View 仅对具有管理员角色的登录用户显示。应该很简单吧?
使用 Razor(或 WebForms 或其他任何东西,实际上无关紧要) View ,将其放入 nav.cshtml 中将是一件简单的事情:
if(HasRole("Administrator")){
@* hyperlink here eg /Views/Admin *@
}
并对 ViewsController 执行以下操作:
return PartialView("Administrator");
肯定可以更改约定,例如,Widget 的路由查找 http://server/Views/widget
而不是 http://server/App/views/widget.htm
和(也许有选择地?)禁用 View 请求的缓存。
在我看来,主要的替代方案是将不应该向从浏览器查看页面源代码的任何人公开的内容公开。如果不应显示某些内容,我宁愿根本不将其包含在 HTML 输出中,也不愿将其全部发送下来并有选择地隐藏/显示客户端。
最佳答案
所以这是我得到的:
在 main.js 中,将 viewLocator.useConvention 调用替换为:
viewLocator.useConvention(null,"/Views",null);
创建一个 ViewsController:
public class ViewsController : Controller
{
public ActionResult Render(string id)
{
return PartialView(id);
}
}
并将以下内容添加到 App_Start\RouteConfig.cs:
routes.MapRoute(
name: "SPAViews",
url: "Views/{id}",
defaults: new { action = "Render" }
);
它没有考虑客户端缓存请求,但它已经完成了 90%。
关于c# - SPA( Hot Towel )-如何更改约定以处理/请求 Razor View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17059346/