【移動(dòng)應(yīng)用開發(fā)技術(shù)】ASP.NET中Controller與Action如何使用_第1頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】ASP.NET中Controller與Action如何使用_第2頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】ASP.NET中Controller與Action如何使用_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

【移動(dòng)應(yīng)用開發(fā)技術(shù)】ASP.NET中Controller與Action如何使用

Controller&Action的定義和使用/upload/information/20210522/379/535400.pngController的查找機(jī)制Microsoft.AspNet.Mvc

Microsoft.AspNet.Mvc.Core

Microsoft.AspNet.Mvc.ModelBinding

Microsoft.AspNet.Mvc.Razor

Microsoft.AspNet.Mvc.Razor.Host

Microsoft.AspNet.Mvc.TagHelpers

Microsoft.AspNet.Mvc.Xml

Microsoft.AspNet.PageExecutionInstrumentation.InterfacesMicrosoft.AspNet.Mvc

Microsoft.AspNet.Mvc.Core

Microsoft.AspNet.Mvc.ModelBinding

Microsoft.AspNet.Mvc.Razor

Microsoft.AspNet.Mvc.Razor.Host

Microsoft.AspNet.Mvc.TagHelpers

Microsoft.AspNet.Mvc.Xml

Microsoft.AspNet.PageExecutionInstrumentation.Interfacespublic

interface

IAssemblyProvider

{

IEnumerable

CandidateAssemblies

{

get;

}

}services.AddMvc().WithControllersAsServices(new[]

{

typeof(MyController).Assembly,

typeof(ExternalPocoController).Assembly

});var

col

=

this.Resolver.GetRequiredService();

var

data

=

col.GetReferencingLibraries("Microsoft.AspNet.Mvc");protected

virtual

IEnumerableGetCandidateLibraries()

{

if

(ReferenceAssemblies

==

null)

{

return

Enumerable.Empty();

}

//

GetReferencingLibraries

returns

the

transitive

closure

of

referencing

assemblies

//

for

a

given

assembly.

return

ReferenceAssemblies.SelectMany(_libraryManager.GetReferencingLibraries)

.Distinct()

.Where(IsCandidateLibrary);

}Controller的判斷public

interface

IControllerTypeProvider

{

IEnumerable

ControllerTypes

{

get;

}

}protected

internal

virtual

bool

IsController([NotNull]

TypeInfo

typeInfo,

[NotNull]

ISet

candidateAssemblies)

{

if

(!typeInfo.IsClass)

//

該類型必須是一個(gè)類

{

return

false;

}

if

(typeInfo.IsAbstract)

//

該類必須不是抽象類

{

return

false;

}

//

We

only

consider

public

top-level

classes

as

controllers.

IsPublic

returns

false

for

nested

//

classes,

regardless

of

visibility

modifiers

if

(!typeInfo.IsPublic)

//

該類必須是一個(gè)Public類(并且不嵌套),嵌套類不能作為Controller

{

return

false;

}

if

(typeInfo.ContainsGenericParameters)

//

該類不能是泛型類

{

return

false;

}

if

(!typeInfo.Name.EndsWith(ControllerTypeName,

StringComparison.OrdinalIgnoreCase)

&&

!DerivesFromController(typeInfo,

candidateAssemblies))

//

該類以Controller結(jié)尾,或繼承于Controller基類,或其父類也是Controller。

{

return

false;

}

if

(typeInfo.IsDefined(typeof(NonControllerAttribute)))

//

該類不能設(shè)置NonControllerAttribute特性

{

return

false;

}

return

true;

}services.AddMvc().WithControllersAsServices(new[]

{

typeof(MyController),

typeof(ExternalPocoController)

});Action的查找機(jī)制public

Task

SelectAsync([NotNull]

RouteContext

context)

{

//

...

}public

Task

SelectAsync([NotNull]

RouteContext

context)

{

//

...

}public

IEnumerable

BuildActionModels([NotNull]

TypeInfo

typeInfo,

[NotNull]

MethodInfo

methodInfo)

{

if

(!IsAction(typeInfo,

methodInfo))

{

return

Enumerable.Empty();

}

//

省略其它代碼

}protected

virtual

bool

IsAction([NotNull]

TypeInfo

typeInfo,

[NotNull]

MethodInfo

methodInfo)

{

//

The

SpecialName

bit

is

set

to

flag

members

that

are

treated

in

a

special

way

by

some

compilers

//

(such

as

property

accessors

and

operator

overloading

methods).

if

(methodInfo.IsSpecialName)

//

不能是特殊名稱(如重載的操作符或?qū)傩栽L問器)

{

return

false;

}

if

(methodInfo.IsDefined(typeof(NonActionAttribute)))

//

不能聲明NonActionAttribute特性

{

return

false;

}

//

Overriden

methods

from

Object

class,

e.g.

Equals(Object),

GetHashCode(),

etc.,

are

not

valid.

if

(methodInfo.GetBaseDefinition().DeclaringType

==

typeof(object))

//不能是重載的方法,比如Equals和GetHashCode

{

return

false;

}

//

Dispose

method

implemented

from

IDisposable

is

not

valid

if

(IsIDisposableMethod(methodInfo,

typeInfo))

//

不能是Dispose方法

{

return

false;

}

if

(methodInfo.IsStatic)

//

不能是靜態(tài)方法

{

return

false;

}

if

(methodInfo.IsAbstract)

//

不能是抽象方法

{

return

false;

}

i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論