Forms MVC 4 | |标识| |如何禁用未经授权用户提交表单?
我有一个基于MVC4的web应用程序,我有一个表单,可以向服务器发送(通过发送到动作)多个文件,现在我启用了授权方法,只处理授权用户 我的问题是,我将Forms MVC 4 | |标识| |如何禁用未经授权用户提交表单?,forms,asp.net-mvc-4,asp.net-identity,authorize,Forms,Asp.net Mvc 4,Asp.net Identity,Authorize,我有一个基于MVC4的web应用程序,我有一个表单,可以向服务器发送(通过发送到动作)多个文件,现在我启用了授权方法,只处理授权用户 我的问题是,我将[Authorize]放在控制器的Post操作之前,因此文件首先上载到服务器,然后未经授权的用户获得要登录的消息(将用户重定向到注册/登录页面) 如果用户未经授权,我想阻止上传文件,因此我需要先检查用户是否为授权用户,然后提交表单 知道我该怎么做吗?不,您在其他地方做错了什么,只需使用Authorize属性作为: [Authorize] [Http
[Authorize]
放在控制器的Post操作之前,因此文件首先上载到服务器,然后未经授权的用户获得要登录的消息(将用户重定向到注册/登录页面)
如果用户未经授权,我想阻止上传文件,因此我需要先检查用户是否为授权用户,然后提交表单
知道我该怎么做吗?不,您在其他地方做错了什么,只需使用
Authorize
属性作为:
[Authorize]
[HttpPost]
public ActionResult YourController()
{
return View();
}
对于未经授权的用户,它将显示要登录的消息,并将用户重定向到注册/登录页面记住,在MVC体系结构中,默认情况下,每个操作都可以无状态调用/重放-即,格式良好的请求将命中相应的操作,因此只有在识别出相应的操作后才会对
AuthorizeAttribute
和其他此类属性进行评估。实际上,这不是MVC的一个特性,而是web体系结构的一个特性
文件上传与任何其他POST
ed值类似,它是作为请求的一部分发送的。现在,您可能有一个异步(ajax)文件上载控件,但即使在这种情况下,文件上载仍然只是另一个普通的旧请求
MVC无法选择您的客户机是否决定向其发送大请求、小请求或任何请求。MVC只能响应客户选择的请求
毫无疑问,在执行POST
操作之前,您应该有一个[Authorize]
。但是,为了防止用户花费时间上传文件,但在发布后被拒绝,您还应该在UI中采取措施,阻止或防止用户在未经身份验证的情况下轻易提出此类请求
换句话说,您需要对客户端进行编程,使其与服务器协同工作,以确定是否鼓励用户上传
您可以做的一件简单的事情是检查User.Identity.IsAuthenticated
,并在为true时显示表单:
@if (User.Identity.IsAuthenticated)
{
// display form razor
}
else
{
// display login razor
}
您还可以使用JavaScript拦截提交,这是一个更深入的实现,但本质上是这样的:
提交时,检查用户是否经过身份验证(可能涉及服务器端动态调用,或者如果合适,您可以依靠客户端来确定)
如果未通过身份验证,则阻止提交,而是显示登录模式
希望这有帮助。在此处发布控制器代码。。