Explicitasp.net
asp.net 时间:2021-04-18 阅读:(
)
ASP.
NET5andMVC6OutlineMotivationDNXASP.
NET5MVC6MotivationModernwebstackUpdatedbuildsystem(nobuildstep)Modernpackagesystem(NuGet)Lightweight/composableruntimeDependencyinjectioneverywhereFlexibleconfiguration/deploymentUnifyMVC/WebAPICrossplatform/portabilitySxSCLRCoreCLROpensourceversionof.
NEThttps://github.
com/dotnet/coreclrContainscoreruntimeandmscorlib(e.
g.
GC,JIT,BCL)Dotnotcontainmanyframeworks(e.
g.
WCF,WPF)CrossplatformWindows,Linux,Mac,FreeBSDPortableDesignedtobe~/bindeployedDNXSDK/toolingtouseaCLRdnvm,dnx,dnu,project.
jsonRuntimehosttoloadaCLRCommandlineorfromotherhost(e.
g.
IIS)ApplicationhostCompileapplicationwithRoslynInvokeapplicationwithdependencyinjection"TheDNX(a.
NETExecutionEnvironment)containsthecoderequiredtobootstrapandrunanapplication,includingthecompilationsystem,SDKtools,andthenativeCLRhosts.
"ComparisontoNode.
jsNodeDNXRuntimeJavaScriptC#/RoslynV8CoreCLRToolingnpmdnu/NuGetNodednxFrameworksConnect*ASP.
NET5Express*MVC6Sequelize*EF7Socket.
io*SignalR3*andtypicallybetween5and20otherchoicesGettingDNX(withoutVisualStudio)WindowsMac@powershell-NoProfile-ExecutionPolicyunrestricted-Command"&{$Branch='dev';iex((new-objectnet.
webclient).
DownloadString('https://raw.
githubusercontent.
com/aspnet/Home/dev/dnvminstall.
ps1'))}"ruby-e"$(curl-fsSLhttps://raw.
githubusercontent.
com/Homebrew/install/master/install)"brewtapaspnet/dnxbrewupdatebrewinstalldnvmDNXcommandlinetoolsDNVM–CLRinstaller/chooserPATHcontains%USERPROFILE%\.
dnx\binContainsdnvm.
cmdanddnvm.
ps1RuntimespecifictoolsDNU–projectutilityDNX–applicationloaderDNVMInstalls/usesaversionoftheCLRCommandslistinstalluse"use"addsaruntimetoPATHDNXHostsanapplicationLoadsCLRCompilesapplicationcodeExecutesMainusingSystem;publicclassProgram{publicvoidMain(){Console.
WriteLine("HelloDNX!
");}}DNXproject.
jsonrequiredConfiguresRuntimesDependenciesCommandsAndmore…{"dependencies":{"Microsoft.
AspNet.
Mvc":"6.
0.
0-beta4"},"frameworks":{"dnx451":{},"dnxcore50":{"dependencies":{"System.
Console":"4.
0.
0-beta-22816"}}},"commands":{"my_command":"YourApp"}}RunningDNXdnxtoapplicationorproject.
jsonisprojectnameorcommandfromproject.
jsondnxruntoapplicationorproject.
json"run"ishardcodedcommandtouse'sprojectnameDNUUtilitytomanage:DependenciesPackagingPublishingOtherutilitiesUsesproject.
jsonProducesproject.
lock.
jsonApplicationdevelopmentdetailsCommandlineargumentsInter-projectdependenciesDependencyinjectionPassingcommandlineargumentsParameterspassedafterarepassedtoapplicationusingSystem;usingSystem.
Linq;publicclassProgram{publicvoidMain(string[]args){Console.
WriteLine(args.
Aggregate((x,y)=>xy));}}Inter-projectdependenciesProjectscanreferenceotherprojectsSource-leveldependency,ratherthanNuGetpackagesDependenciesarelocatedin:Implicitviaproject'sparentdirectoryExplicitviaglobal.
jsonglobal.
jsonresidesinancestordirectory{"projects":["src","test","c:\\other"]}DependencyinjectionDependenciesareinjectedintoProgram'sctorusingSystem;usingMicrosoft.
Framework.
Runtime;publicclassProgram{privatereadonlyIApplicationEnvironment_env;publicProgram(IApplicationEnvironmentenv){_env=env;}publicvoidMain(string[]args){Console.
WriteLine(_env.
ApplicationName);Console.
WriteLine(_env.
ApplicationBasePath);Console.
WriteLine(_env.
RuntimeFramework);}}VisualStudio2015Project.
jsonisprojectfileRunsthecommandlinetoolsAddsbellsandwhistlesIntellisense/quickactionsUIforNuGetUIfortoolingDebuggerOmniSharpRoslynasaserviceIntellisenseStatementcompletionRefactoringPluginsforcommoneditorsSublimeAtomVIMBracketsVSCodeEmacsASP.
NET5NewhostingmodelNewHTTPpipelineASP.
NET5ASP.
NET5isHTTPpipelineimplementationsupportsvariousservers(IIS,WebListener,Kestrel.
.
)canrunOWINand"native"middlewareUsesahigherlevelabstractionoverOWINconcept(HttpContext&RequestDelegate)MVC6isMicrosoft'sapplicationframeworkisOWINcompatibleHostServerOWINMiddlewareASP.
NET5MiddlewareUserAgentMVC6HowASP.
NET5getsinvokeddnx.
commandMicrosoft.
Framework.
ApplicationHostMicrosoft.
AspNet.
Hosting(WebListener,Kestrel,IIS)HeliosIISStartup.
csConfigureServices(…)Configure(…)PipelineprimitivesStartapp.
Use(context,next)app.
Map("/path")app.
Use(context,next)app.
Run(context)app.
Use(context,next)app.
Run(context)IApplicationBuilder.
Run(RequestDelegatehandler)app.
Run(asynccontext=>{awaitcontext.
Response.
WriteAsync("HelloASP.
NET5");});namespaceMicrosoft.
AspNet.
Builder{publicdelegateTaskRequestDelegate(HttpContextcontext);}IApplicationBuilderMap(stringpath,Actionapp)app.
Map("/hello",helloApp=>{helloApp.
Run(async(HttpContextcontext)=>{awaitcontext.
Response.
WriteAsync("HelloASP.
NET5");});});IApplicationBuilderUse(Funcmiddleware)app.
Use(next=>asynccontext=>{if(!
context.
Request.
Path.
Value.
EndsWith("/favicon.
ico")){Console.
WriteLine("pre");Console.
WriteLine(context.
Request.
Path);awaitnext(context);Console.
WriteLine("post");Console.
WriteLine(context.
Response.
StatusCode);}else{awaitnext(context);}});MiddlewareclassespublicclassInspectionMiddleware{privatereadonlyRequestDelegate_next;publicInspectionMiddleware(RequestDelegatenext){_next=next;}publicasyncTaskInvoke(HttpContextcontext){Console.
WriteLine($"request:{context.
Request.
Path}");await_next(context);}}app.
UseMiddleware();DependencyInjectionDI(almost)everywhereStartupctorConfigureServices/ConfigureInlinemiddlewareMiddlewareclassesHostprovideddependencies(e.
g.
IApplicationEnvironment,LoggerFactory)DependenciesprovidedinConfigureServicesDIExamplespublicclassStartup{publicStartup(IApplicationEnvironmentenvironment){/*stuff*/}publicvoidConfigureServices(IServiceCollectionservices,ILoggerFactoryfactory){/*registermorestuff*/}publicvoidConfigure(IApplicationBuilderapp,ISomeServicesomeService){app.
Run(async(HttpContextcontext,IMyCustomServicecustom)=>{awaitcontext.
Response.
WriteAsync(c.
Foo());});}}RegisteringdependenciesNewinstance"percall"NewinstanceperHTTPrequestSingletonservices.
AddTransient();services.
AddSingleton();services.
AddScoped();Example:InjectcurrentuserintodependencypublicvoidConfigureServices(IServiceCollectionservices,ILoggerFactoryfactory){services.
AddTransient(provider=>{varcontext=provider.
GetRequiredService();returnnewMyCustomServiceWithUser(context.
HttpContext.
User);});}Configurationweb.
configisnomoreNewconfigurationsystembasedonkey/valuepairscommandlineenvironmentvariablesJSONfilesINIfilesConfigurationcancomefrommultiplesourceslastsourcewinsExamplepublicclassStartup{publicIConfigurationConfiguration{get;set;}publicStartup(IHostingEnvironmentenv){Configuration=newConfiguration().
AddJsonFile("config.
json").
AddJsonFile($"config.
{env.
EnvironmentName}.
json",optional:true).
AddEnvironmentVariables();}//more}UsingconfigurationpublicclassStartup{IConfiguration_configuration;publicStartup(){_configuration=newConfiguration().
AddJsonFile("config.
json");}publicvoidConfigure(IApplicationBuilderapp){varcopyright=newCopyright{Company=_configuration.
Get("copyright:company"),Year=_configuration.
Get("copyright:year")};app.
Run(async(context)=>{awaitcontext.
Response.
WriteAsync($"Copyright{copyright.
Year},{copyright.
Company}");});}}{"copyright":{"year":"2015","company":"FooIndustries"}}OptionsOptionsisapatternintroducedbyDNXConvertrawname/valuepairsintostronglytypedclassesPutoptionsintoDIsystemHeavilyusedthroughoutASP.
NET5/MVC6ExamplepublicclassStartup{publicvoidConfigureServices(IServiceCollectionservices){//initializeoptionssystemservices.
AddOptions();//de-serializeandregisterconfigsettingsservices.
Configure(_configuration.
GetSubKey("copyright"));}publicvoidConfigure(IApplicationBuilderapp){app.
Run(async(HttpContextcontext,IOptionscopyright)=>{awaitcontext.
Response.
WriteAsync($"Copyright{copyright.
Options.
Year},{copyright.
Options.
Company}");});}}Packaging&DeploymentdnupackCreatesNugetpackagecontainingallcompilationtargetsdnupublishCreatesdeployablewebapplicationSelf-containedforDNXCoreMVC6PackagingMiddlewareRoutingandactionselectionControllerinitializationModelbindingchangesRazorFiltersAPIsErrorhandlingPackagingMVC6ispackagedentirelyasaNuGetMicrosoft.
AspNet.
Mvc{"dependencies":{"Microsoft.
AspNet.
Server.
IIS":"1.
0.
0-beta4","Microsoft.
AspNet.
Server.
WebListener":"1.
0.
0-beta4","Microsoft.
AspNet.
Mvc":"6.
0.
0-beta4"}}MiddlewareMVC6isconfiguredasmiddlewareInConfigureServicesviaAddMvcInConfigureviaUseMvcpublicclassStartup{publicvoidConfigureServices(IServiceCollectionservices){services.
AddMvc();}publicvoidConfigure(IApplicationBuilderapp){app.
UseMvc();}}OverridingdefaultsettingsConfigureMvcusedtooverridedefaultspublicclassStartup{publicvoidConfigureServices(IServiceCollectionservices){services.
AddMvc().
ConfigureMvc(mvc=>{mvc.
AntiForgeryOptions.
CookieName="__antixsrf";mvc.
Filters.
Add(.
.
.
);mvc.
ViewEngines.
Add(.
.
.
);});}}RoutingRoutesconfiguredviaUseMvcRouteParameters.
OptionalfromMVC5removedpublicvoidConfigure(IApplicationBuilderapp){app.
UseMvc(routes=>{routes.
MapRoute("old_default","{controller}/{action}",new{controller="Home",action="Index"});routes.
MapRoute("new_default","{controller=Home}/{action=Index}/{id}");});}ControllersControllerbaseclassstillprovidedActionresultsnowimplementIActionResultControllerbaseprovidesmanyhelperstocreateactionresultsView(),Content(),Created(),HttpNotFound(),HttpUnauthorized(),HttpBadRequest()publicclassHomeController:Controller{publicIActionResultIndex(){returnView();}}AttributeroutingAttributeroutingenabledbydefaultpublicclassHomeController:Controller{//~/or~/hello-world[Route("/")][Route("/hello-world")]publicIActionResultIndex(){returnView();}}AttributeroutingAttributeroutingcanbeappliedtoclass[controller]and[action]actastokens[Route("[controller]/[action]")]publicclassHomeController:Controller{//~/Home/IndexpublicIActionResultIndex(){returnView();}}CombiningRouteattributesRouteattributesinheritpathRoutePrefixfromMVC5removedCanreplaceinheritedpathIftemplatestartswith"/"or"~/"[Route("[controller]")]publicclassHomeController:Controller{//~/Home/hello[Route("hello")]publicIActionResultIndex(){returnView();}//~/hello[Route("/hello")]publicIActionResultIndex2(){returnView();}}Routeparameters[Route]allowsparametersWith{param}syntaxSupportsfiltersWith{param:filter}syntax[Route("[controller]/[action]")]publicclassHomeController:Controller{//GET~/Home/IndexpublicIActionResultIndex(){returnView();}//GET~/Home/Index/5[Route("{id:int}")]publicIActionResultIndex(intid){returnView();}}HTTPmethodbasedroutesHttpGet,HttpPost,HttpPut,HttpDelete,HttpPatchFilteractionmethodonrequestmethodBuildon[Route]semantics[Route("[controller]/[action]")]publicclassHomeController:Controller{//GET~/Home/Index[HttpGet]publicIActionResultIndex(){returnView();}//~/Submit[HttpPost("/Submit")]publicIActionResultSubmit(){returnView();}}AreasAreasdefinedwiththe[Area]attributeUsedtomatchan{area}routeparamAttributeroutingallows[area]routetokenViewsmuststillresideunder~/Areas//Views/publicvoidConfigure(IApplicationBuilderapp){app.
UseMvc(routes=>{routes.
MapRoute("new_default","{area}/{controller=Home}/{action=Index}/{id}");});}[Area("account")]publicclassHomeController:Controller{//.
.
.
}POCOcontrollersControllerclassescanbePOCODiscoveredinprojectsthatreferenceMicrosoft.
AspNet.
Mvc.
*Identifiedby"Controller"classnamesuffix[NonController]disablesDependencyinjectionCaninjectdependenciesintocontrollersviaConstructorPropertiesvia[FromServices]Actionparametersvia[FromServices]publicclassHomeController{IHttpContextAccessor_accessor;publicHomeController(IHttpContextAccessoraccessor){_accessor=accessor;}[FromServices]publicIHttpContextAccessorAccessor{get;set;}publicIActionResultIndex(){returnnewViewResult(){ViewName="Index"};}}Per-requestcontextobjectsCaninjectcertainMVCrequestsobjectsHttpContext,ActionContext,ModelStateDictionary,ViewDataDictionary,etc.
Propertiesvia[Activate]Actionparametersvia[Activate]publicclassHomeController{[Activate]publicViewDataDictionaryViewData{get;set;}[Activate]publicHttpContextContext{get;set;}publicIActionResultIndex(){ViewData["message"]="HelloMVC6!
";returnnewViewResult(){ViewName="Index",ViewData=ViewData};}}ModelbindingchangesImplicitmodelbindingfromroute,query,andformDefaultbindingorderchangedto:1)route,2)query,3)formExplicitmodelbindingpossibleusing:[FromRoute][FromQuery][FromForm][FromHeader][FromServices][FromBody]RazorSharedconfig_ViewStartand_GlobalImportChunks@directivesTagHelpersLikeWebFormscustomcontrolsViewComponentsChildactionreplacementsSharedrazorconfiguration_ViewStart.
cshtmlstillexistsCannoweasilybeputinapplicationrootLayoutassignmentnolongerisfullpath_GlobalImport.
cshtmlisnewSoontobecalled_ViewImports.
cshtmlAllowsforsharing@using,@addTagHelperchunksacrossviewsCanbelocatedinthesameplacesas_ViewStart.
cshtmlRazordirectives(akachunks)@model,@using,@section,@functionsstillexist@helperisgone@inject,@addTagHelperarenewAlso,@awaitHtml.
PartialAsync()isnew@injectAllowsdependencyinjectionintoview@inject@usingMicrosoft.
Framework.
OptionsModel@injectIOptionsConfig@Config.
Options.
SiteNameTaghelpersLikecustomcontrolsforMVCAllowserver-sidecodetoinspecttheelementCanmodifyattributes,tag,and/orcontents@addTagHelper"Namespace.
ClassName,Assembly"Or@addTagHelper"*,Assembly"@addTagHelper"SpanTagHelper,YourProjectName"TaghelperimplementationTagHelperbaseclassClassnameusedtomatchelementOverrideProcessorProcessAsyncInspectelementviaTagHelperContextAlteroutputviaTagHelperOutputpublicclassSpanTagHelper:TagHelper{publicoverridevoidProcess(TagHelperContextcontext,TagHelperOutputoutput){if(context.
AllAttributes.
ContainsKey("emoji")&&"smile"==context.
AllAttributes["emoji"].
ToString()){output.
Attributes.
Add("title","smile");output.
Content.
SetContent(output.
SelfClosing=false;}}}Taghelperimplementation[TargetElement]canbeusedtomatchelementAttributescanbeusedtofilter[HtmlAttributeName]willreadincomingattributeWillremovefromoutput[TargetElement("span",Attributes="emoji")]publicclassEmojiTagHelper:TagHelper{[HtmlAttributeName("emoji")]publicstringEmoji{get;set;}publicoverridevoidProcess(TagHelperContextcontext,TagHelperOutputoutput){if("smile"==Emoji){output.
Attributes.
Add("title","smile");output.
Content.
SetContent(output.
SelfClosing=false;}}}MVCtaghelpersManageYourAccountYou'reinproduction!
ValidationtaghelpersEnteryouremail.
近期联通CUVIP的线路(AS4837线路)非常火热,妮妮云也推出了这类线路的套餐以及优惠,目前到国内优质线路排行大致如下:电信CN2 GIA>联通AS9929>联通AS4837>电信CN2 GT>普通线路,AS4837线路比起前两的优势就是带宽比较大,相对便宜一些,所以大家才能看到这个线路的带宽都非常高。妮妮云互联目前云服务器开放抽奖活动,每天开通前10台享3折优惠,另外...
说明一下:gcorelabs的俄罗斯远东机房“伯力”既有“Virtual servers”也有“CLOUD SERVICES”,前者是VPS,后者是云服务器,不是一回事;由于平日大家习惯把VPS和云服务器当做一回事儿,所以这里要特别说明一下。本次测评的是gcorelabs的cloud,也就是云服务器。 官方网站:https://gcorelabs.com 支持:数字加密货币、信用卡、PayPal...
乐凝网络怎么样?乐凝网络是一家新兴的云服务器商家,目前主要提供香港CN2 GIA、美国CUVIP、美国CERA、日本东京CN2等云服务器及云挂机宝等服务。乐凝网络提供比同行更多的售后服务,让您在使用过程中更加省心,使用零云服务器,可免费享受超过50项运维服务,1分钟内极速响应,平均20分钟内解决运维问题,助您无忧上云。目前,香港HKBN/美国cera云服务器,低至9.88元/月起,支持24小时无理...
asp.net为你推荐
thinkphpthinkPHP怎么样呢iprouteip route-static 192.168.1.0 255.255.255.0 3.3.3.2什么意思支付宝账户是什么支付宝帐号,指的是什么帐号 是网营密码吗360arp防火墙在哪arp防火墙在哪开额- -360里是哪个?360免费建站免费空间-360免费建站空间是多大?客服电话赶集网客服电话是多少滴滴估值500亿滴滴流水每天280元一个月下来能赚 多少小型汽车网上自主编号申请网上选号自编号怎么选徐州商标介绍徐州的一种产品powerbydedecms如何去掉织梦网站底部的powered by dedecms方法
景安vps idc评测 云网数据 hkbn locvps linode代购 128m内存 国外私服 wordpress技巧 天猫双十一秒杀 好看的桌面背景图 我爱水煮鱼 秒杀汇 adroit 免费全能主机 中国电信测速网 umax120 微软服务器操作系统 怎么建立邮箱 双线asp空间 更多