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.
酷锐云是一家2019年开业的国人主机商家,商家为企业运营,主要销售主VPS服务器,提供挂机宝和云服务器,机房有美国CERA、中国香港安畅和电信,CERA为CN2 GIA线路,提供单机10G+天机盾防御,提供美国原生IP,支持媒体流解锁,商家的套餐价格非常美丽,CERA机房月付20元起,香港安畅机房10M带宽月付25元,有需要的朋友可以入手试试。酷锐云自开业以来一直有着良好的产品稳定性及服务态度,支...
酷番云怎么样?酷番云就不讲太多了,介绍过很多次,老牌商家完事,最近有不少小伙伴,一直问我台湾VPS,比较难找好的商家,台湾VPS本来就比较少,也介绍了不少商家,线路都不是很好,有些需求支持Windows是比较少的,这里我们就给大家测评下 酷番云的台湾VPS,支持多个版本Linux和Windows操作系统,提供了CN2线路,并且还是原生IP,更惊喜的是提供的是无限流量。有需求的可以试试。可以看到回程...
beervm是一家国人商家,主要提供国内KVM VPS,有河南移动、广州移动等。现在预售湖南长沙联通vds,性价比高。湖南长沙vps(长沙vds),1GB内存/7GB SSD空间/10TB流量/1Gbps端口/独立IP/KVM,350元/月,有需要的可以关注一下。Beervm长沙联通vps套餐:长沙联通1G青春版(预售)长沙联通3G标准版(预售)长沙联通3G(预售)vCPU:1vCPU:2vCPU...
asp.net为你推荐
三星iphone企业cms我想给一个企业做个网站需要用到CMS 不知道什么CMS比较适合企业主要是产品模块强大asp.net什么叫ASP.NET?重庆网站制作重庆网站制作,哪家公司服务,价格都比较好?文档下载手机下载的文件在哪里能找到开放平台微信的开放平台是干什么用的购物车什么叫淘宝购物车传奇域名谁有霸气一点的传奇名字。给个正大天地网正大光明是什么数字爱买网超爱买网的特点
万网域名代理 动态域名解析软件 vps.net Hello图床 suspended http500内部服务器错误 国外在线代理 360云服务 太原联通测速 国外的代理服务器 湖南idc php服务器 阿里云邮箱登陆地址 lamp兄弟连 酸酸乳 免费php空间 江苏双线 锐速 htaccess 删除域名 更多