Asp.Net Core-Authorize 特性
来源:互联网 发布:怎么更改网络节点 编辑:程序博客网 时间:2024/06/05 17:21
在本章中,我们将讨论Authorize特性。 到目前为止,在我们的应用程序中,我们允许匿名用户做任何事情。 他们可以编辑员工详细信息,查看详细信息,但我们没有创建新员工的功能。 让我们先添加创建功能,然后我们将使用Authorize属性限制用户访问。
我们需要首先在Views→Home文件夹中创建一个新的MVC View页面,并调用Create.cshtml然后添加以下代码。
@model Employee
@{
ViewBag.Title =
"Create"
;
}
<h1>Create</h1>
@
using
(Html.BeginForm()) {
<div>
@Html.LabelFor(m => m.Name)
@Html.EditorFor(m => m.Name)
@Html.ValidationMessageFor(m => m.Name)
</div>
<div>
<input type =
"submit"
value =
"Save"
/>
</div>
}
现在我们将在HomeController中为POST和GET添加action方法,如下面的程序所示。
[HttpGet]
public
ViewResult Create() {
return
View();
}
[HttpPost]
public
IActionResult Create(EmployeeEditViewModel model) {
if
(ModelState.IsValid) {
var employee =
new
Employee();
employee.Name = model.Name;
var context =
new
FirstAppDemoDbContext();
SQLEmployeeData sqlData =
new
SQLEmployeeData(context);
sqlData.Add(employee);
return
RedirectToAction(
"Details"
,
new
{ id = employee.Id });
}
return
View();
}
让我们在Index.cshtml文件中添加一个指向Create View的链接,如下面的程序所示。
@model HomePageViewModel
@{
ViewBag.Title =
"Home"
;
}
<h1>Welcome!</h1>
<table>
@
foreach
(var employee
in
Model.Employees) {
<tr>
<td>@employee.Name
<td>
<a asp-controller =
"Home"
asp-action =
"Details"
asp-routeid =
"@employee.Id"
>Details</a>
<a asp-controller =
"Home"
asp-action =
"Edit"
asp-routeid =
"@employee.Id"
>Edit</a>
</td>
</tr>
}
</table>
<div>
<a asp-action =
"Create"
>Create</a>
</div>
运行应用程序; 您将看到以下页面。
在主页上,您将看到Create链接。 当您单击Create链接,它将带您到创建视图。
在名称输入框中输入名称,然后单击保存按钮。
现在,您将看到新添加的员工的详细信息视图。 让我们点击Home链接。
在此应用程序中,每个用户都可以创建,编辑员工,每个人都可以看到详细视图。 我们希望更改此行为,以便将来匿名用户只能看到主页上的员工列表,但每个其他操作都需要用户标识自己并登录。我们可以使用Authorize属性来完成此操作。
您可以将Authorize属性放在单个控制器上或控制器中的单个操作上。
[Authorize]
public
class
HomeController : Controller {
//....
}
当我们将Authorize属性放在控制器本身上时,authorize属性应用于其中的所有动作。
MVC框架不允许请求达到受此属性保护的操作,除非用户通过授权检查。
默认情况下,如果不使用其他参数,则只检查Authorize属性将检查以确保用户已登录,以便我们知道其身份。
但您可以使用参数指定任何喜欢的自定义授权策略。
还有一个AllowAnonymous属性。 当您想要使用控制器上的Authorize属性来保护所有操作时,此属性非常有用,但是此单个操作或一个或两个要取消保护的操作,并允许匿名用户访问该特定操作。
[AllowAnonymous]
public
ViewResult Index() {
var model =
new
HomePageViewModel();
using
(var context =
new
FirstAppDemoDbContext()) {
SQLEmployeeData sqlData =
new
SQLEmployeeData(context);
model.Employees = sqlData.GetAll();
}
return
View(model);
}
让我们在我们的应用程序中尝试这些属性。 在运行的应用程序中,匿名用户可以编辑员工信息。
我们想要更改此选项,并强制用户在编辑员工之前登录并识别自己。 现在让我们进入HomeController。 我们将在此限制访问一个或两个操作。 我们可以始终将Authorize属性放在我们要保护的那些特定操作上。 我们还可以将Authorize属性放在控制器本身上,并且此Authorize属性位于Microsoft.AspNet.Authorization命名空间中。
我们现在将使用Authorize属性,并强制用户识别自己进入此控制器,除了主页,如下面的程序所示。
[Authorize]
public
class
HomeController : Controller {
[AllowAnonymous]
public
ViewResult Index() {
var model =
new
HomePageViewModel();
using
(var context =
new
FirstAppDemoDbContext()) {
SQLEmployeeData sqlData =
new
SQLEmployeeData(context);
model.Employees = sqlData.GetAll();
}
return
View(model);
}
public
IActionResult Details(
int
id) {
var context =
new
FirstAppDemoDbContext();
SQLEmployeeData sqlData =
new
SQLEmployeeData(context);
var model = sqlData.Get(id);
if
(model ==
null
) {
return
RedirectToAction(
"Index"
);
}
return
View(model);
}
[HttpGet]
public
IActionResult Edit(
int
id) {
var context =
new
FirstAppDemoDbContext();
SQLEmployeeData sqlData =
new
SQLEmployeeData(context);
var model = sqlData.Get(id);
if
(model ==
null
) {
return
RedirectToAction(
"Index"
);
}
return
View(model);
}
[HttpPost]
public
IActionResult Edit(
int
id, EmployeeEditViewModel input) {
var context =
new
FirstAppDemoDbContext();
SQLEmployeeData sqlData =
new
SQLEmployeeData(context);
var employee = sqlData.Get(id);
if
(employee !=
null
&& ModelState.IsValid) {
employee.Name = input.Name;
context.SaveChanges();
return
RedirectToAction(
"Details"
,
new
{ id = employee.Id });
}
return
View(employee);
}
[HttpGet]
public
ViewResult Create() {
return
View();
}
[HttpPost]
public
IActionResult Create(EmployeeEditViewModel model) {
if
(ModelState.IsValid) {
var employee =
new
Employee();
employee.Name = model.Name;
var context =
new
FirstAppDemoDbContext();
SQLEmployeeData sqlData =
new
SQLEmployeeData(context);
sqlData.Add(employee);
return
RedirectToAction(
"Details"
,
new
{ id = employee.Id });
}
return
View();
}
}
显示雇员列表的主页或Index.cshtml文件具有AllowAnonymous属性。 让我们现在运行你的应用程序。
按F12键,打开开发工具。 现在,转到网络选项卡。
我们想在开发者工具中看到一些东西,所以我们可以看到它是如何工作的。 当您单击编辑链接时,您将看到一个空白页。
如果您查看开发人员工具,您将看到从服务器返回的HTTP状态代码是401状态代码。
401状态代码告诉浏览器该请求不允许通过,因为它缺少有效的身份验证凭据。 这告诉我们Authorize属性正在工作。
同样,当您单击主页上的创建链接时,您将看到与以下屏幕截图中所示的相同的错误。
这里,坏的部分是用户留在空白页面上,除非他们有开发者工具打开,他们可能不知道这是一个身份验证问题。
这就是Identity框架可以介入和帮助的地方。
Identity框架可以检测应用程序的某一部分何时希望返回401状态代码,因为用户不允许到达那里,Identity框架可以将其转换为登录页面,并允许用户克服这个问题。
一旦我们得到Identity框架的安装和配置,我们将看到它是如何工作的。
但是现在,我们可以看到Authorize属性正在工作。
本文标题: Asp.Net Core-Authorize 特性
本文地址:http://www.yuanjiaocheng.net/ASPNET-CORE/core-authorize-attribute.html
- Asp.Net Core-Authorize 特性
- ASP.NET MVC 2 Authorize - 自定义Authorize的实现
- ASP.NET MVC Authorize - 自定义Authorize的实现
- asp.net core新特性(1):TagHelper
- ASP.NET 2015(ASP.NET Core 1.0)新特性
- AspNet MVC4 教学-11:Asp.Net MVC4 默认Authorize及自定义Authorize快速Demo
- ASP.NET Core 2加入了Razor页面特性
- ASP.NET Core 2.0 特性介绍和使用指南
- Authorize attribute and jquery AJAX in asp.net MVC
- Authorize.net 支付流程
- ASP.NET Core 介绍
- ASP.NET Core
- Asp.net Core demo
- ASP.Net Core
- ASP.NET Core
- ASP.NET Core 日志
- ASP.NET Core
- ASP.NET Core
- java基础语法(一)
- python使用selenium爬取InCites中journal数据
- [后端][php]获取文章正文的第1张图片
- calendarview 日历控件
- 浅谈SAP CRM开发——技术概念、与ECC 系列产品区别
- Asp.Net Core-Authorize 特性
- 线程的随机性之实现Thread类
- Spire.Doc 教程:在word文档中创建书签
- 文件上传按钮(适配所有浏览器)
- 第六十篇:commons-beanutils使用介绍
- fragmentTabHost中点击一个fragment中的按钮,跳转到另外一个fragment的解决办法
- hibernate 5 与 mysql 5.7 以上 版本的 坑
- Sklearn包含的常用算法
- 计算机网络笔记整理(一):概述