如何将ASP.NET用户和路由数据传递给JavaScript?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何将ASP.NET用户和路由数据传递给JavaScript?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2546字,纯文字阅读大概需要4分钟。
内容图文
我在ASP.NET中有一些关于用户和路由的数据.
如何在JavaScript中使用它?
目前,我在_Layout.cshtml文件中有以下行:
@{ Html.RenderAction("ContextScript", "WebParts"); }
ContextScript是一个返回以下局部视图的动作:
<script id="context-script">
var context = {
controller: "@Request.RequestContext.RouteData.Values["controller"]",
action: "@Request.RequestContext.RouteData.Values["action"]",
area: "@Request.RequestContext.RouteData.Values["area"]",
culture: "@Request.RequestContext.RouteData.Values["culture"]",
isMobile: @Request.Browser.IsMobileDevice.ToString().ToLower(),
rootUrl: "@BaseMulticultureHttpApplication.RootApplicationUrl",
isAuthenticated: @User.Identity.IsAuthenticated.ToString().ToLower(),
username: "@(User.Identity.IsAuthenticated ? User.Identity.Name : "")",
isBankClient: @(User.Identity.IsAuthenticated ? User.Identity.AcquireUser().BankClientID.HasValue.ToString().ToLower() : "false"),
iin: "@(User.Identity.IsAuthenticated ? User.Identity.AcquireUser().IIN : "")",
fullname: "@(User.Identity.IsAuthenticated ? User.Identity.AcquireUser().FullName : "")"
};
</script>
然后,许多捆绑脚本正在读取此上下文.
但是,我坚信有一个更好的选择,因为:
>用户和路由信息在全局范围内可用,污染它并使此上下文可用于恶意浏览器插件,XSS注入脚本(谁知道)等.
>向最终用户披露了一些有关实施的信息
什么是正确和安全的方法来做到这一点?
解决方法:
从两年多的经验来看我自己未回答的问题,我想说使用AJAX可能是最合适的解决方案:
也就是说,RouteData可以按原样注入:
<script id="context-script">
var context = {
controller: "@Request.RequestContext.RouteData.Values["controller"]",
action: "@Request.RequestContext.RouteData.Values["action"]",
area: "@Request.RequestContext.RouteData.Values["area"]",
culture: "@Request.RequestContext.RouteData.Values["culture"]",
isMobile: @Request.Browser.IsMobileDevice.ToString().ToLower()
};
</script>
但是用户数据应该作为API公开:
// ASP.NET -> Models
public class CurrentUserModel
{
public CurrentUserModel(...)
{
// initialize properties
}
public bool IsAuthenticated { get; }
public string Username { get; }
// other properties go here
}
// ASP.NET -> Controllers
public class UserController : ApiController
{
// GET /user/current
[HttpGet]
[AllowAnonymous]
public async Task<CurrentUserModel> Current()
{
CurrentUserModel model = new CurrentUserModel(...);
return Ok(model);
}
}
// Client-side
<script>
apiClient.user.current().then(u => {
// work with user details here
});
</script>
这里使用GET操作作为REST风格的示例.需要额外的安全考虑因素.例如,如果您的API托管在同一个域上并使用cookie进行身份验证,那么请考虑应用AntiForgeryToken或切换到POST方法以防止CSRF攻击.
内容总结
以上是互联网集市为您收集整理的如何将ASP.NET用户和路由数据传递给JavaScript?全部内容,希望文章能够帮你解决如何将ASP.NET用户和路由数据传递给JavaScript?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。