asp.net-mvc-3 – 用于基本身份验证的asp mvc 3 ActionFilter
|
我有一个使用基本身份验证的ASP MVC3 restful服务.搜索堆栈溢出后,我创建了以下代码. public class BasicAuthentication : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var req = filterContext.HttpContext.Request;
if (String.IsNullOrEmpty(req.Headers["Authorization"]))
{
filterContext.Result = new HttpNotFoundResult();
}
else
{
var credentials = System.Text.ASCIIEncoding.ASCII
.GetString(Convert.FromBase64String(req.Headers["Authorization"].Substring(6)))
.Split(':');
var user = new { Name = credentials[0],Password = credentials[1] };
if(!(user.Name == "username" && user.Password == "passwords"))
{
filterContext.Result = new HttpNotFoundResult();
}
}
}
}
1)ActionFilterAttribute是最好的方法吗? 2)设置filterContext.Result是否正确拒绝访问控制器方法? 3)我有什么问题吗? 谢谢. -缺口 解决方法1)ActionFilterAttribute是最好的方法吗?我想是这样.此方法反映了内置Authorize属性的实现. 2)设置filterContext.Result是否正确拒绝访问控制器方法? 3)我有什么问题吗? >您假设Authorization标头的内容位于 下面是我的代码实现(我肯定也有它的问题). public override void OnActionExecuting(ActionExecutingContext filterContext)
{
try
{
if (String.IsNullOrEmpty(filterContext.HttpContext.Request.Headers["Authorization"]))
{
filterContext.Result = new HttpUnauthorizedResult();
}
else
{
if (filterContext.HttpContext.Request.Headers["Authorization"].StartsWith("Basic ",StringComparison.InvariantCultureIgnoreCase))
{
string[] credentials = ASCIIEncoding.ASCII.GetString(Convert.FromBase64String(filterContext.HttpContext.Request.Headers["Authorization"].Substring(6))).Split(':');
if (credentials.Length == 2)
{
if (String.IsNullOrEmpty(credentials[0]))
{
filterContext.Result = new HttpUnauthorizedResult();
}
else if (!(credentials[0] == "username" && credentials[1] == "passwords"))
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
else
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
else
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
base.OnActionExecuting(filterContext);
}
catch
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
笔记 >我没有包含用户名和密码的非法字符检查. 参考 (1)http://msdn.microsoft.com/en-us/magazine/gg232768.aspx (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 类型“表达式”在未引用的程序集中定义
- ASP.net移动应用程序开发
- asp.net-core – CoreCLR中的MD5CryptoServiceProvider的替
- Asp.net – 尝试访问工作网页时出错
- ASP.NET Core 2.0 Web API响应缓存
- asp.net-mvc – ASP.NET MVC获取上次添加记录的ID
- asp.net-mvc-2 – 使用’class(或其他保留关键字)作为匿名类
- asp.net – 如何设置IHttpAsyncHandler超时?
- ASP.NET Web API可以在与MVC相同的URL上工作吗?
- asp.net – 在另一个控件之前插入控件
- asp.net-mvc – RequireHttps导致Amazon Elastic
- asp.net-mvc – $.ajax({async:false})请求仍然
- asp.net-mvc-3 – MVC 3使用RenderPage更改视图中
- 如何使用ASP.NET Core创建多部分HTTP响应
- asp.net – 在创建aspx之后,在文件后创建代码
- asp.net-mvc – 如何在ASP.NET MVC控制器中设置十
- kendo-ui – 剑道网格刷新(数据绑定两次)
- asp.net – 304未修改静态文件
- asp.net – SmtpClient.SendAsync调用自动取消
- asp.net – 允许 – (破折号)在正则表达式中
