日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET MVC编程——控制器

發布時間:2024/4/17 asp.net 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET MVC编程——控制器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

每一個請求都會經過控制器處理,控制器中的每個方法被稱為控制器操作,它處理具體的請求。

1操作輸入參數

控制器的操作的輸入參數可以是內置類型也可以是自定義類型。

?

2操作返回結果

?

結果類型

調用方法

備注

ContentResult

Content

文本類型

FileContentResult/FileStreamResult/FilePathResult

File

文件類型

HttpStatusCodeResult(HttpNotFoundResult,HttpUnauthorizedResult)

?

HttpNotFound

包含404,401狀態碼

?

?

?

JavaScriptResult

JavaScript

JavaScript代碼

JsonResult

Json

Json字符串

PartialViewResult

PartialView

部分視圖

RedirectResult

Redirect/RedirectPermanent

跳轉到給定URL

RedirectToRouteResult

RedirectToAction/RedirectToRoute

重定向到指定的路由

ViewResult

View

指定視圖

EmptyResult

不返回任何內容

?

上述返回值類型均繼承自ActionResult,除了上述類型外,控制器可以返回任意的類型!

?

3 HTTP動詞特性

特性有HttpGet、HttpPost、HttpDelete、HttpPut、HttpHead、HttpOptions、HttpPatch,當沒有限定任何動詞時,不論何種請求,get,post,put等等,被請求的操作都會被調用。

?

4 操作過濾器

過濾器接口有

授權過濾器:public interface IAuthorizationFilter

動作過濾器:public interface IActionFilter

身份驗證過濾器:public interface IAuthenticationFilter

異常過濾器:public interface IExceptionFilter

結果過濾器:public interface IResultFilter

1)AuthorizeAttribute

public class AuthorizeAttribute : FilterAttribute, IAuthorizationFilter

AuthorizeAttribute的兩個常用屬性

Roles:獲取或設置有權訪問控制器或操作方法的用戶角色。

Users:獲取或設置有權訪問控制器或操作方法的用戶。

可以在Web.config的<system.web>配置未通過驗證跳轉的頁面:

<authentication mode="Forms">

???<forms loginUrl="~/Account/Login"></forms>

</authentication>

配合其使用的屬性

AllowAnonymous

public sealed class AllowAnonymousAttribute : Attribute

允許跳過AuthorizeAttribute的驗證執行控制器操作。

2)ChildActionOnlyAttribute

public sealed class ChildActionOnlyAttribute : FilterAttribute, IAuthorizationFilter

指示操作方法只能作為子操作進行調用

例:

控制器

?

public class HomeController : Controller {[ChildActionOnly]public ActionResult TestPy(){return PartialView();} }

?

分部視圖TestPy.cshtml:

<div><h1>這是部分視圖</h1> </div>

調用頁Index.cshtml:

<div class="row"><a href="@Url.Action("Home", "TestPy")">點擊調用分部視圖</a> </div>

執行報錯:404!

將調用頁代碼修改如下:

?

<div class="row">@Html.Action("TestPy") </div>

?

運行可以正常顯示部分視圖內容

3)RequireHttpsAttribute

public class RequireHttpsAttribute : FilterAttribute, IAuthorizationFilter

強制通過 HTTPS 重新發送不安全的 HTTP 請求

4)ValidateInputAttribute

public class ValidateInputAttribute : FilterAttribute, IAuthorizationFilter

驗證通過窗體傳進來的信息

5)ValidateAntiForgeryTokenAttribute

public sealed class ValidateAntiForgeryTokenAttribute : FilterAttribute, IAuthorizationFilter

阻止偽造請求

6)AsyncTimeoutAttribute

public class AsyncTimeoutAttribute : ActionFilterAttribute

設置異步操作超時時間

7)NoAsyncTimeoutAttribute

public sealed class NoAsyncTimeoutAttribute : AsyncTimeoutAttribute

設置異步操作永不超時

8)OutputCacheAttribute

public class OutputCacheAttribute : ActionFilterAttribute, IExceptionFilter

將緩存其輸出的操作方法

9)HandleErrorAttribute

public class HandleErrorAttribute : FilterAttribute, IExceptionFilter

處理由操作方法引發的異常

10)ActionNameAttribute

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]

public sealed class ActionNameAttribute : ActionNameSelectorAttribute

可以使用此特性改變操作的名稱,使用新名稱作為路由參數,方可路由到該操作

例:

?

[ActionName("AboutName")] public ActionResult About() {...... }

?

11)NonActionAttribute

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]

public sealed class NonActionAttribute : ActionMethodSelectorAttribute

使用此特性修飾控制器操作,不會路由到此控制器方法

?

5向視圖傳遞數據

與其說傳遞數據,倒不如說視圖如何獲得控制器處理過的數據。視圖通過兩種方式可以拿到數據:

1)通過控制器操作返回的結果(控制器返回結果是數據和視圖的結合。

2)將結果賦給控制器屬性并在View中使用這些屬性。

public abstract class ControllerBase : IController

類中有三個屬性ViewData、ViewBag、TempData,使用著三個屬性向視圖傳遞數據。

ViewData

它是字典類型

public ViewDataDictionary ViewData { get; set; }

public class ViewDataDictionary : IDictionary<string, object>, ICollection<KeyValuePair<string, object>>, IEnumerable<KeyValuePair<string, object>>, IEnumerable

例:

第一種方式,弱類型

控制器

?

public ActionResult TestViewData() {ViewData["Field"] = "VD";return View("Contact"); }

?

視圖Contact.cshtml

@ViewData["Field"]

Index.cshtml視圖中調用

?

@Html.Action("TestViewData")

?

第二種方式,弱型別,使用ViewData.Model

這種方式無法使用VS編譯器的智能提示功能

控制器

?

public ActionResult TestViewData() {ViewData.Model = new ModelF { Field="VD"};return View("Contact"); }

?

視圖Contact.cshtml

@Model.Field

Index.cshtml視圖中調用

?

@Html.Action("TestViewData")

?

第三種方式,強型別,使用ViewData.Model

控制器與第二種方式基本相同,不同點就是視圖Contact.cshtml

@model MVCPointApp.Models.ModelF @Model.Field

ViewBag

它是動態類型,對ViewData的包裝

public dynamic ViewBag { get; }

例:

控制器操作中ViewBag.Field

使用@ViewBag.Message

TempData

它也是字典類型

public TempDataDictionary TempData { get; set; }

public class TempDataDictionary : IDictionary<string, object>, ICollection<KeyValuePair<string, object>>, IEnumerable<KeyValuePair<string, object>>, IEnumerable

?

6 異步控制器

原理:

ASP.NET從線程池獲得線程處理異步請求,異步調用完后,該線程回到線程池以便可以處理其他請求,同時通知ASP.NET重新抓取一個線程(不一定是處理異步請求的線程)來完成具體的異步操作(輸出數據等)。

使用異步控制器的目的:

異步控制器操作中也要等待任務直至處理完,所以處理速度不比同步方法快,其主要作用是高效地利用服務器資源。

使用異步控制器的情形:

可能引發瓶頸的長操作,網絡或I\O密集型操作,可取消長操作的情形。

構建異步控制器:

控制器繼承AsyncController,控制器操作返回Task<ActionResult>,并用async 修飾。

?

public class AnysController : AsyncController {// GET: Anyspublic async Task<ActionResult> Index(){//睡眠,模擬長任務Thread.Sleep(5000000);return View("Testpy");}}

?

?

7 擴展控制器

基類控制器

定義一個基類控制器,以便處理異?;驘o法找到請求對應的操作。

注意如果控制器使用HttpPost特性修飾,而客戶端發起的是get請求,也會認為是無法找到操作。

例:

?

public class BaseController : Controller{protected override void OnException(ExceptionContext filterContext){//錯誤日志記錄 }protected override void HandleUnknownAction(string actionName){//處理能找到此控制器,但找不到請求對應的操作 }}

?

?

擴展授權過濾器(AuthorizeAttribute)

具體示例見:驗證、授權與安全

?

動作過濾器(ActionFilterAttribute

ActionFilterAttribute是一個抽象類,有四個方法:

操作執行后被框架自動調用的方法:OnActionExecuted

操作執行前被框架自動調用的方法:OnActionExecuting

返回結果后被框架自動調用的方法:OnResultExecuted

返回結果前被框架自動調用的方法:OnResultExecuting

?

參考:

1.Jess Chadwick/Todd Snyder/Hrusikesh Panda,徐雷/徐揚

譯。ASP.NET MVC4 Web編程

2.Jon Galloway/Phil Haack/Brad Wilson/K. Scott Allen,孫遠帥/鄒權譯 ?ASP.NET MVC4 高級編程(第四版)

3.黃保翕,ASP.NET MVC4開發指南

4.蔣金楠,ASP.NET MVC4框架揭秘

5.https://www.asp.net/mvc

?

-----------------------------------------------------------------------------------------

轉載與引用請注明出處。

時間倉促,水平有限,如有不當之處,歡迎指正。

?

轉載于:https://www.cnblogs.com/hdwgxz/p/8633661.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的ASP.NET MVC编程——控制器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。