精华内容
下载资源
问答
  • curso-aps-net-core-mvc ASP.NET Core MVC的Cursor de ASP.NET Core MVC-零站点标准站点
  • ASP.NET MVC升级到ASP.NET Core MVC踩坑小结.pdf
  • This is a simple pipeline example for a .NET Core application, showing just how easy it is to get up and running with .NET development using GitLab. Reference links GitLab CI Documentation .NET ...
  • 发票管理器 ASP.NET Core MVC,EF CoreASP.NET Core Web API
  • ASP.NET Core MVC路由工作原理概述 ASP.NET Core MVC带路径参数的路由示例 ASP.NET Core MVC固定前/后缀的路由示例 ASP.NET Core MVC正则表达式匹配路由示例 ASP.NET Core MVC路由约束与自定义路由约束 ASP.NET Core...

    一、前言

    1、本文主要内容

    • ASP.NET Core MVC路由工作原理概述
    • ASP.NET Core MVC带路径参数的路由示例
    • ASP.NET Core MVC固定前/后缀的路由示例
    • ASP.NET Core MVC正则表达式匹配路由示例
    • ASP.NET Core MVC路由约束与自定义路由约束
    • ASP.NET Core MVC RouteAttribute绑定式路由使用介绍

    2、本教程环境信息

    软件/环境说明
    操作系统Windows 10
    SDK2.1.401
    ASP.NET Core2.1.3
    IDEVisual Studio Code 1.27
    浏览器Chrome 69

    本篇代码基于上一篇进行调整:https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-02

    3、前置知识

    你可能需要的前置知识

    • MVC框架/模式介绍

    https://baike.baidu.com/item/mvc

    • 正则表达式

    http://www.runoob.com/regexp/regexp-tutorial.html

    二、ASP.NET Core MVC 路由简介

    1、ASP.NET Core MVC路由工作原理概述

    ASP.NET Core MVC路由的作用就是将应用接收到请求转发到对应的控制器去处理。

    应用启动的时候会将路由中间件(RouterMiddleware)加入到请求处理管道中,并将我们配置好的路由加载到路由集合(RouteCollection)中。当应用接收到请求时,会在路由管道(路由中间件)中执行路由匹配,并将请求交给对应的控制器去处理。

    另外,需要特别注意的是,路由的匹配顺序是按照我们定义的顺序从上之下匹配的,遵循是的先配置先生效的原则。

    2、路由配置参数说明

    参数名说明
    name路由名称,不可重复
    template路由模板,可在模板中以{name}格式定义路由参数
    defaults配置路由参数默认值
    constraints路由约束

    在路由配置中,MVC框架内置了两个参数,controller,action。
    路由匹配通过后,需要根据这两个参数将当前请求交由对应的Controller+Action去处理。所以,这两个参数缺少任何一个,都会导致路由无法正常工作。
    通常我们有两个选择:

    • 在template中指定{controller},{action}参数
    • 在默认值中为controller、action指定默认值

    三、ASP.NET Core MVC 路由示例

    1、准备工作

    为了方便我们进行测试,我们先准备好承接路由的Controller&Action

    • 创建TutorialController

    在Controllers文件夹下新增控制器TutorialController.cs并继承于Controller

    using System;
    using Microsoft.AspNetCore.Mvc;
    
    namespace Ken.Tutorial.Web.Controllers
    {
        public class TutorialController : Controller
        {
          
        }
    }
    
    
    • 增加Action:Index
    public IActionResult Index()
    {
        return Content("ASP.NET Core Tutorial by ken from ken.io");
    }
    
    • 增加Action:Welcome
    public IActionResult Welcome(string name, int age)
    {
        return Content($"Welcome {name}(age:{age}) !");
    }
    

    2、带路径参数的路由

    路由配置:

    routes.MapRoute(
            name: "TutorialPathValueRoute",
            template: "{controller}/{action}/{name}/{age}"
        );
    

    此路由适配URL:

    • /tutorial/welcome/ken/20

    不适配URL:

    • /tutorial/welcome/ken

    如果我们希望不在路径中设置age,也可以被路由到,那么可以将age指定为可选参数,将模板中的{age}修改为{age?}即可

    routes.MapRoute(
            name: "TutorialPathValueRoute",
            template: "{controller}/{action}/{name}/{age?}"
        );
    

    此路由适配URL:

    • /tutorial/welcome/ken/20
    • /tutorial/welcome/ken
    • /tutorial/welcome/ken?age=20

    3、固定前后缀的路由

    固定前缀路由配置:

    routes.MapRoute(
        name: "TutorialPrefixRoute",
        template: "jiaocheng/{action}",
        defaults: new { controller = "Tutorial" }
    );
    

    此路由适配URL:

    • /jiaocheng/index
    • /jiaocheng/welcome

    由于路径参数中不包含controller参数,所以需要在默认值中指定。

    固定后缀路由配置

    routes.MapRoute(
        name: "TutorialSuffixRoute",
        template: "{controller}/{action}.html"
    );
    

    此路由适配URL:

    • /tutorial/index.html
    • /tutorial/welcome.html
    • /home/index.html
    • /home/time.html

    固定后缀的路由适用于伪静态等诉求
    固定前后缀可以根据自己的需求结合起来使用。
    当然,你也可以在路由模板中间设定固定值。

    四、ASP.NET Core MVC 路由约束

    1、路由约束介绍

    路由约束主要是用于约束路由参数,在URL格式满足路有模板要求之后,进行参数检查。如果参数不满足路由约束,那么依然会返回未匹配该路由。最常用的可能就是参数类型校验、参数长度校验、以及通过正则满足的复杂校验。

    在开始之前需要在Startup.cs中引用相关命名空间

    using Microsoft.AspNetCore.Routing;
    using Microsoft.AspNetCore.Routing.Constraints;
    

    2、参数长度约束

    路由配置:约束name长度不能>5

    routes.MapRoute(
        name: "TutorialLengthRoute",
        template: "hello/{name}/{age?}",
        defaults: new { controller = "Tutorial", action = "Welcome", name = "ken" },
        constraints: new { name = new MaxLengthRouteConstraint(5) }
    );
    

    此路由适配

    • /hello
    • /hello/ken
    • /hello/ken/1000

    次路由不适配

    • /hello/kenaaaa

    我们也可以直接在模板中配置路由约束:

    routes.MapRoute(
        name: "TutorialLengthRoute2",
        template: "hello2/{name:maxlength(5)}/{age?}",
        defaults: new { controller = "Tutorial", action = "Welcome", name = "ken" }
    );
    

    3、参数范围约束

    路由配置:约束 1<=age<=150

    routes.MapRoute(
        name: "TutorialLengthRoute",
        template: "hello/{name}/{age?}",
        defaults: new { controller = "Tutorial", action = "Welcome", name = "ken" },
        constraints: new {  age = new CompositeRouteConstraint(new IRouteConstraint[] { 
                                new IntRouteConstraint(), 
                                new MinRouteConstraint(1), 
                                new MaxRouteConstraint(150) }) }
    );
    

    此路由适配:

    • /hello/ken/1
    • /hello/ken/150

    此路由不适配

    • /hello/ken/1000

    我们也可以直接在模板中配置路由约束:

    routes.MapRoute(
        name: "TutorialLengthRoute2",
        template: "hello2/{name}/{age:range(1,150)?}",
        defaults: new { controller = "Tutorial", action = "Welcome", name = "ken" }
    );
    

    4、带有正则表达式约束的路由

    路由配置:

    routes.MapRoute(
        name: "TutorialRegexRoute",
        template: "welcome/{name}",
        defaults: new { controller = "Tutorial", Action = "Welcome" },
        constraints: new { name = @"k[a-z]*" }
    );
    

    此路由适配:

    • /welcome/k
    • /welcome/ken
    • /welcome/kevin

    此路由不适配

    • /welcome/k1
    • /welcome/keN
    • /welcome/tom

    这里我们用正则表达式约束了参数name,必须通过正则k[a-z]*匹配通过,即:以小写字母k开头,且后续可跟0到多个小写字母

    我们也可以直接在模板中配置路由约束:

    routes.MapRoute(
        name: "TutorialRegexRoute2",
        template: "welcome2/{name:regex(k[a-z]*)}",
        defaults: new { controller = "Tutorial", Action = "Welcome" }
    );
    

    5、自定义路由约束

    1、创建自定义约束

    在项目根目录创建目录Common,并在目录创建类:NameRouteConstraint.cs,然后实现接口:IRouteConstraint

    using System;
    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Routing;
    
    namespace Ken.Tutorial.Web.Common
    {
        public class NameRouteConstraint : IRouteConstraint
        {
            public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
            {
                string name = values["name"]?.ToString();
                if (name == null) return true;
                if (name.Length > 5 && name.Contains(",")) return false;
                return true;
            }
        }
    }
    
    

    这里我们约束当name长度>5时,name中不能包含,

    2、路由配置

    引入命名空间

    using Ken.Tutorial.Web.Common;
    

    在ConfigureServices引入路由约束

    public void ConfigureServices(IServiceCollection services)
        {
            //引入MVC模块
            services.AddMvc();
    
            //引入自定义路由约束
            services.Configure<RouteOptions>(options =>
            {
                options.ConstraintMap.Add("name", typeof(NameRouteConstraint));
            });
        }
    

    配置路由

    routes.MapRoute(
        name: "TutorialDiyConstraintRoute",
        template: "diy/{name}",
        defaults: new { controller = "Tutorial", action = "Welcome" },
        constraints: new { name = new NameRouteConstraint() }
    );
    

    此路由适配:

    • /diy/ken
    • /diy/ken,
    • /diy/kenny

    此路由不适配

    • /diy/kenny,

    当然,按照惯例,依然可以在模板中配置路由约束

    routes.MapRoute(
        name: "TutorialDiyConstraintRoute2",
        template: "diy2/{name:name}",
        defaults: new { controller = "Tutorial", action = "Welcome" }
    );
    

    五、ASP.NET Core MVC 绑定式路由配置

    1、路由配置风格

    • 集中式配置

    前面章节提到的路由配置都是在Startup类中进行的集中式路由配置,集中配置的路由,除了template中没有配置{controller}参数,默认都是对所有控制器(Controller)生效的。这种集中配置的方式一般我们只要配置一个默认路由,其他情况我们只需要不满足默认模板的情况下进行配置即可。尤其是对URL没有友好度要求的应用,例如:后台管理系统

    • 分散式配置/绑定式配置

    对于集中式路由配置的方式,如果某个Controller/Action配置了特殊路由,对于代码阅读就会不太友好。不过没关系,ASP.NET Core MVC也提供了RouteAttribute可以让我们在Controller或者Action上直接指定路由模板。

    不过要强调的是,一个控制器只能选择其中一种路由配置,如果控制器标记了RouteAttribute进行路由配置,那么集中式配置的路由将不对其生效。

    2、绑定式路由配置

    在项目Controllers目中新建TestController.cs继承与Controller
    并配置Action与路由

    using System;
    using Microsoft.AspNetCore.Mvc;
    
    namespace Ken.Tutorial.Web.Controllers
    {
        [Route("/test")]
        public class TestController : Controller
        {
            [Route("")]
            [Route("/test/home")]
            public IActionResult Index()
            {
                return Content("ASP.NET Core RouteAttribute test by ken from ken.io");
            }
    
            [Route("servertime")]
            [Route("/t/t")]
            public IActionResult Time(){
                return Content($"ServerTime:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} - ken.io");
            }
        }
    }
    
    
    配置项说明
    [Route("/test")]表示该Controller访问路由前缀为/test,必须以/开头
    [Route("")]表示以Controller的路由配置为前缀访问该Action;可以通过/test路由到该Action
    [Route("/test/home")]表示忽略Controller的路由配置;可以通过/test/home路由到该Action
    [Route(“servertime”)]表示以Controller的路由配置为前缀访问该Action;可以通过/test/servertime路由到该Action
    [Route("/t/t")]表示忽略Controller的路由配置;可以通过/t/t路由到该Action

    RouteAttribute中配置的参数,就相当于我们集中式配置中的路由模板(template),最终框架还是帮我们初始化成路由规则,以[Route("/test/home")]为例,相当于生成了以下路由配置:

    routes.MapRoute(
        name: "Default",
        template: "test/home",
        defaults: new { controller = "Test", action = "Index" }
    );
    

    当然,我们也可以在[Route]配置中使用模板参数,而且依然可以在模板中使用约束,自定义约束也没问题。

    [Route("welcome/{name:name}")]
    public IActionResult Welcome(string name){
        return Content($"Welcome {name} !");
    }
    

    最大的区别就是不能定义默认值了,可能也不需要了,你说是吧。_

    六、备注

    1、附录

    • 本文代码示例

    https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-03

    • 本文参考

    https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/routing?view=aspnetcore-2.1


    本文首发于我的独立博客: https://ken.io/note/asp.net-core-tutorial-mvc-route

    展开全文
  • Pro ASP.NET Core MVC

    2017-12-27 15:58:41
    Pro ASP.NET Core MVC(6th) ASP.NET Core MVC is a radical shift for web developers using the Microsoft platform. It emphasizes clean architecture, design patterns, and testability, and it doesn’t try ...
  • ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 03. 服务注册和管道 语雀: https://www.yuque.com/yuejiangliu/dotnet/olbl88 视频地址:https://www.bilibili.com/video/av38392956/?p=3 自定义接口对象获取...

    ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 03. 服务注册和管道
    语雀:
    https://www.yuque.com/yuejiangliu/dotnet/olbl88
    视频地址:https://www.bilibili.com/video/av38392956/?p=3

    自定义接口对象获取信息 现在不想从配置源里面获取信息,自己写一个服务,首先弄一个接口叫做IWelcomeService

    假设接口有这么一个方法getMessage()

    那么无论是哪个对象或者服务实现了这个接口,那么我就可以从实现了该接口的对象或者服务里来获取这个信息
    把鼠标放在这,按Ctrl+.选择第一条在新的文件里面生成

    然后这个接口就声明到了这里

    这时候提示没有定义这个GetMessage方法

    还是把鼠标放在这,Ctrl+.

    x修改返回类型为string,现在就定义完了

    创建WelComeService实现该接口,然后在接口上Ctrl+.实现该接口


    接口实现完了

    返回这段字符串


    把它移动到这个文件里

    现在就是一个单独的类了

    现在接口有个实现了该接口的类也有了
    这里也调用了GetMessage()的方法

    打开命令行

    dotnet run 直接报错了

    主要的错误信息:意思就是无法找到实现了IWelcome的接口的对象

    需要注册一个服务,对应着这个IWelcomeService
    下面这两个服务都已经注册过了 是asp.net core 默认的配置,IWelcomeService是我们自己定义的接口,这个接口还没有进行注册

    ConfigureServices方法就是用来注册服务的

    这是一些预先设置的注册的服务的一些形式。

    IWelcomeService是我们自定义的,有这么这几种方式注册。
    下面使用单例模式进行注册的形式。在整个web项目的生命周期里,最多只会出现一个WelcomeService的实例

    AddTransient:每次请求,每次有其他的类或者方法请求IWelcomeService的时候,它都建立一个新的WelcomeService的实例,它
    是非常轻量级的

    AddScoped:,每次http请求,一次web请求就会生成一次实例,在这个web请求期间,如果多次请求,那么他还是使用同一个WelcomeService实例

    这里我们使用到单例模式,再次运行项目


    管道和中间件



    中间件决定如何处理这个请求,中间件其实就是一个对象,每个中间件的角色和功能都不一样,每个中间件功能都局限在特定的领域内,
    所以我们整个web应用,将会使用很多个中间件
    管道是双向设计的,一个请求进入管道会按照我添加的顺序依次进入中间件,我首先添加的是Logger,那么请求就先经过logger,下一个添加的是授权中间件,就会经过授权的中间件,最后是路由的,就会走路由的中间件
    假设路由中间价产生了一个响应,那么这个响应就原路返回,路由--授权--logger和进入的时候路径是相反的

    我们需要按照特性的顺序来设置我们的中间件组成我们的web应用的功能








     

    转载于:https://www.cnblogs.com/wangjunwei/p/10915187.html

    展开全文
  • ASP.NET Core MVC控制器简介 ASP.NET Core MVC控制器操作简介 ASP.NET Core MVC控制器操作简介返回类型简介 ASP.NET Core MVC控制器操作简介返回类型示例 ASP.NET Core MVC控制器参数映射逻辑说明 ASP.NET Core MVC...

    一、前言

    1、本教程主要内容

    • ASP.NET Core MVC控制器简介
    • ASP.NET Core MVC控制器操作简介
    • ASP.NET Core MVC控制器操作简介返回类型简介
    • ASP.NET Core MVC控制器操作简介返回类型示例
    • ASP.NET Core MVC控制器参数映射逻辑说明
    • ASP.NET Core MVC控制器参数映射/获取示例

    2、本教程环境信息

    软件/环境说明
    操作系统Windows 10
    SDK2.1.401
    ASP.NET Core2.1.3
    IDEVisual Studio Code 1.27
    浏览器Chrome 69

    本篇代码以下代码进行调整:https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-02

    3、前置知识

    你可能需要的前置知识

    • MVC框架/模式介绍

    https://baike.baidu.com/item/mvc

    二、ASP.NET Core MVC 控制器简介

    1、ASP.NET Core MVC 控制器概述

    在MVC Web框架中,路由模块会对接收到的请求进行匹配并转交由对应的控制器(Controller)进行处理。
    控制器的作用就是处理接收到的请求,解析用户输入并执行对应程序理逻辑,然后返回对应的输出。

    用户的输入可以是QueryString、FormData、也可以是HTTP Header、HTTP Body。
    控制器的输出格式通常是:HTML、JSON、XML、普通文本

    2、控制器(Controller)的定义

    所有Controller类都必须直接或间接继承于Microsoft.AspNetCore.Mvc.ControllerBase。为了搭配视图引擎使用,ASP.NET Core MVC 框架内置了 Microsoft.AspNetCore.Mvc.Controller类,提供了一些视图引擎需要的特性。所以,默认我们继承该类即可。

    3、控制器(Controller)的命名

    Controller类的类名(ClassName)推荐以Controller为结尾(不区分大小写)。
    例如:

    • HomeController
    • TestController

    路由模块去掉结尾的Controller作为ControllerName。
    那么对应的ControllerName则分别是HomeTest。这也是路由映射到Controller的主要标识。

    当然,你也可以不以Controller作为控制器类名(ClassName)的固定后缀,那么路由模块会以完整的类名(ClassName)作为ControllerName

    ASP.NET MVC框架中,控制器(Controller)类名必须以Controller作为后缀,但是在 ASP.NET Core MVC框架中去掉了这个限制。

    以下Controller的定义都是可以的:

    //推荐
    public class HomeController : Controller
    {
        //ControllerName=Home
    }
    
    public class HomeController : BaseController
    {
        //ControllerName=Home
    }
    
    public class Test : Controller
    {
        //ControllerName=Test
    }
    

    三、ASP.NET Core MVC 控制器操作简介

    1、ASP.NET Core MVC 控制器操作概述

    控制器(Controller)操作(Action)就是控制器接收到请求后实际用与处理请求的程序方法/函数。

    Controller接收到请求后根据路由的ActionName找到对应的Action,然后将用户的输入映射到该Action的参数,最终Action实际执行完成后再返回对应的输出。

    2、控制器操作(Action)的定义

    Action必须是控制器中定义的公有非静态方法,例如:

    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return Content("Hello World ! -ken.io");
        }
        
        public string Test()
        {
            return "test";
        }
        
        public void DoSomething()
        {
            //DoSomething
        }
    }
    

    按照默认的路由配置:

    • Action:Index() 将响应/home/index的请求
    • Action: Test() 将响应/home/test的请求
    • Action: DoSomething() 将响应/home/dosomething的请求

    如果你在Controller定义了一个公有的非静态方法,但不想让这个方法处理请求,那么可以标记为NonAction

    public class HomeController : Controller
    {
        [NonAction]
        public void LogicMethod(){
    
        }
    }
    

    3、控制器操作(Action)返回类型说明

    ASP.NET Core MVC 限定 Action返回类型必须是实现了Microsoft.AspNetCore.Mvc.IActionResult接口的类型,框架本身提供了该接口的默认实现Microsoft.AspNetCore.Mvc.ActionResult,并提供了ActionResult类的子类,用于输出不同内容格式的需求。

    不过在定义Action方法的时候,返回值类型也可以定义成string、int等,这些自定义的返回类型会在返回到响应流之前被框架自动包装到合适的ActionResult子类型中。

    常用的ActionResult子类说明

    Action返回类型Controller内置方法说明
    ViewResultView()将视图数据交由Razor视图引擎渲染
    PartialViewResultPartialView()将视图数据交由Razor视图引擎部分视图(PartialView)渲染
    ContentResultContent()返回自定义文本
    JsonResultJson()返回对象的JSON序列化结果
    FileResultFile()返回要写入响应中的二进制输出
    RedirectResultRedirect()重定向到指定的Url
    RedirectToRouteResultRedirectToAction(),RedirectToRoute()重定向到指定的Action或者路由
    EmptyResult/在Action返回null或者Action定义返回关键字是void时会被包装为EmptyResult

    四、ASP.NET Core MVC Action方法返回类型示例

    1、准备工作

    在Controllers文件夹中新建ActionResultTestController.cs并继承于Controller类用于测试。

    using System;
    using Microsoft.AspNetCore.Mvc;
    
    namespace Ken.Tutorial.Web.Controllers
    {
        public class ActionResultTestController : Controller
        {
           
        }
    }
    

    在Startup.cs配置该测试控制器专用路由

    //配置ActionResult测试专用路由
    routes.MapRoute(
        name: "ActionResultTest",
        template: "art/{action}",
        defaults: new { controller = "ActionResultTest"}
    );
    

    2、ContentResult使用示例

    定义返回ContentResult的Action

    public IActionResult ContentTest()
    {
       return Content("Content Result Test --ken.io");
    }
    

    启动项目,浏览器访问 {host:port}/art/contenttest,将看到以下输出:

    ContentResult Test by ken.io
    

    3、JsonResult使用示例

    定义返回JsonResult的Action

    public IActionResult JsonTest()
    {
        return Json(new { Message = "JsonResult Test", Author = "ken.io" });
    }
    

    启动项目,浏览器访问 {host:port}/art/jsontest,将看到以下输出

    {
      "message": "JsonResult Test",
      "author": "ken.io"
    }
    

    4、FileResult使用示例

    定义返回FileResult的Action

    public IActionResult FileTest()
    {
        var bytes = Encoding.Default.GetBytes("FileResult Test by ken.io");
        return File(bytes, "application/text", "filetest.txt");
    }
    

    启动项目,浏览器访问 {host:port}/art/jsontest,将会下载文件filetest.txt。
    文件内容为:

    FileResult Test by ken.io
    

    5、Redirect使用示例

    定义返回Redirect相关的Action

    public IActionResult RedirectTest()
    {
        return Redirect("https://ken.io");
    }
    
    public IActionResult RedirectToActionTest()
    {
        return RedirectToAction("jsontest");
    }
    
    public IActionResult RedirectToRouteTest()
    {
        return RedirectToRoute("Default", new { Controller = "home", Action = "index" });
    }
    

    启动项目,浏览器访问测试:

    • 访问 /art/redirecttest,将跳转到 https://ken.io
    • 访问 /art/redirecttoactiontest,将跳转到 /art/jsontest
    • 访问 /art/redirecttoroutetest,将跳转到 /

    五、ASP.NET Core MVC Action方法参数映射示例

    1、Action参数映射说明

    路由将请求交由对应的Controller处理时,Controller会找到对应的Action方法,并从RouteData或HTTP请求数据(QueryString、FormData、Header等)找到执行该方法所需要的参数的值。

    如果未找到参数对应的数据,且该参数类型是可以为null的类型,则null将作为参数值传递递,否则将会引发一场。

    另外,Action方法也可以不定义参数,手动从RouteData或HTTP请求数据(QueryString、FormData、Header等)获取对应的参数值。

    2、准备工作

    在Controllers文件夹中新建ParamsMappingTestController.cs并继承于Controller类用于测试。

    using System;
    using Microsoft.AspNetCore.Mvc;
    
    namespace Ken.Tutorial.Web.Controllers
    {
        public class ParamsMappingTestController:Controller
        {
            
        }
    }
    

    在Startup.cs配置该测试控制器专用路由

    //配置参数映射测试专用路由
    routes.MapRoute(
        name: "ParamsMappingTest",
        template: "pmt/{action}/{id?}",
        defaults: new { controller = "ParamsMappingTest"}
    );
    

    3、基础参数映射示例

    定义接收路由参数的Action

    public IActionResult GetId(int id)
    {
        return Content($"Action params mapping test by ken.io, id:{id}");
    }
    

    启动应用,浏览器访问 /pmt/getid/1024 或者 /pmt/getid?id=1024,将会看到以下输出:

    Action params mapping test by ken.io, id:1024
    

    或者通过PostMan等工具post访问 /pmt/getid 在HTTP Header参数增加id=1024并发送请求,也会看到同样输出

    aspnet-core-mvc-action-params-mapping-httpdata-basic-kbrbm.png

    4、数组参数参数映射示例

    定义接收数组参数的Action

    public IActionResult GetArray(string[] id)
    {
        var message = "Action params mapping test by ken.io,id:";
        if (id != null)
        {
            message += string.Join(",", id);
        }
        return Content(message);
    }
    

    应用启动,浏览器访问 /pmt/getarray/1,2 或者 /pmt/getarray?id=1,2,将会看到以下输出:

    Action params mapping test by ken.io,id:1,2
    

    或者通过PostMan等工具post访问 /pmt/getarray 并设置表单参数并发送请求,也会看到同样输出

    aspnet-core-mvc-action-params-mapping-httpdata-basic-array-kbrbm.png

    5、自定类型参数映射示例

    在项目根目录创建Models文件夹,并创建Person.cs类文件

    public class Person
    {
        public string Name { get; set; }
    
        public int Age { get; set; }
    }
    

    定义接收自定义参数的Action

    public IActionResult GetPerson(Person person)
    {
        return Json(new { Message = "Action params mapping test by ken.io", Data = person });
    }
    

    应用启动,浏览器访问 /pmt/getperson?name=ken&age=18,将会看到以下输出:

    {
      "message": "Action params mapping test by ken.io",
      "data": {
        "name": "ken",
        "age": 18
      }
    }
    

    或者通过PostMan等工具post访问 /pmt/getperson 并设置表单参数并发送请求,也会看到同样输出

    aspnet-core-mvc-action-params-mapping-httpdata-custom-kbrb.png

    6、自定义类型数组参数映射示例

    定义接收自定义类型数组参数的Action

    public IActionResult GetPersonList(List<Person> person)
    {
        return Json(new { Message = "Action params mapping test by ken.io", Data = person });
    }
    

    启动应用,浏览器访问 /pmt/getpersonlist?person[0].name=ken&person[0].age=18&person[1].name=tom&person[1].age=20
    将会看到以下输出:

    {
      "message": "Action params mapping test by ken.io",
      "data": [
        {
          "name": "ken",
          "age": 18
        },
        {
          "name": "tom",
          "age": 20
        }
      ]
    }
    

    或者通过PostMan等工具post访问 /pmt/getpersonlist 并设置表单参数并发送请求,也会看到同样输出

    aspnet-core-mvc-action-params-mapping-httpdata-custom-array-kbrb.png

    7、JSON类型参数映射示例

    定义接收JSON类型参数的Action

    public IActionResult GetPersonJson([FromBody]Person person)
    {
        return Json(new { Message = "Action params mapping test by ken.io", Data = person });
    }
    

    启动应用,这时候我们就只能通过PostMan工具进行测试了

    首先设置 Content-Type=application/json

    aspnet-core-mvc-action-params-mapping-httpdata-custom-json-contenttype-kbrbm.png

    然后设置JSON表单参数并发送请求,就会看到对应输出

    aspnet-core-mvc-action-params-mapping-httpdata-custom-json-body-kbrb.png

    8、手动获取参数示例

    定义手动获取参数的Action

    public IActionResult GetByHand()
    {
        return Json(new
        {
            Id = RouteData.Values["id"],
            Name = Request.Query["name"]
        });
    }
    

    应用启动后,浏览器访问 /pmt/getbyhand/1024?name=ken&name=tom&age=18
    将看到以下输出:

    {
      "id": "1024",
      "name": [
        "ken",
        "tom"
      ]
    }
    

    RouteData.Values[“id”]:从路由数据中获取数据
    Request.Query[“name”]:从Url参数中获取数据
    Request.Form[“name”]:从表单参数中获取数据

    六、备注

    1、附录

    • 本文代码示例

    https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-04


    本文首发于我的独立博客:https://ken.io/note/asp.net-core-tutorial-mvc-controller-action

    展开全文
  • Angular ASP.NET Core MVC

    2019-03-14 14:41:31
    ASP.NET核心MVC开发人员的角度来发现Angular,一个领先的客户端Web框架 这两种关键技术结合在...这个快节奏的实用指南从螺母和螺栓开始,为您提供在项目中组合Angular(从2.0版开始)和ASP.NET Core MVC所需的知识。
  • Getting started with ASP.NET Core MVC and Visual Studio VS开发asp.net core mvc 入门 2017-3-72 分钟阅读时长 本文内容 1.Install Visual Studio and .NET Core 安装 VS 与 .NET Core 2.Create a web app ...

    索引:

    目录索引

    Getting started with ASP.NET Core MVC and Visual Studio

    VS开发asp.net core mvc 入门

    2017-3-7 2 分钟阅读时长 

    本文内容

    1.Install Visual Studio and .NET Core

    安装 VS 与 .NET Core

    2.Create a web app

    创建一个 web 应用

    By Rick Anderson

    This tutorial will teach you the basics of building an ASP.NET Core MVC web app using Visual Studio 2017.

    本教程将会教你如何使用VS2017创建一个基本的asp.net core mvc 应用程序

    There are 3 versions of this tutorial:

    除此之外,还有其它三个版本的教程(自己翻译~):

    For the Visual Studio 2015 version of this tutorial, see the VS 2015 version of ASP.NET Core documentation in PDF format.

    Install Visual Studio and .NET Core

    安装 vs 与 .net core

    Install Visual Studio Community 2017. Select the Community download. Skip this step if you have Visual Studio 2017 installed.

    安装vs 2017 社区版。选择社区版下载。如果你已安装过可以跳过这个步骤。

    Run the installer and select the following workloads:

    运行这个安装包,选择下面的工作项:

    • ASP.NET and web development (under Web & Cloud)

    需要勾选的环境一

    • .NET Core cross-platform development (under Other Toolsets)

    需要勾选的环境二

     

    Create a web app

    创建一个 web 应用

    From Visual Studio, select File > New > Project.

    在vs中选择 File > New > Project 菜单,新建。

    Complete the New Project dialog:

    完成 新建项目 对话框:

    • In the left pane, tap .NET Core

    在左边的窗格,点击 .net core

    • In the center pane, tap ASP.NET Core Web Application (.NET Core)

    在中间的窗格,点击 ASP.NET Core Web Application (.NET Core)

    • Name the project "MvcMovie" (It's important to name the project "MvcMovie" so when you copy code, the namespace will

    命名项目名称为 MvcMovie

    match.)

    • Tap OK

    点击 OK

     

    Complete the New ASP.NET Core Web Application (.NET Core) - MvcMovie dialog:

    完成 New ASP.NET Core Web Application (.NET Core) - MvcMovie 对话框:

    • In the version selector drop-down box tap ASP.NET Core 1.1

    在版本选择下拉框中选择 ASP.NET Core 1.1 选项

    • Tap Web Application

    点击 Web Application

    • Keep the default No Authentication

    保持默认的 No Authentication 选择

    • Tap OK.

    点击 OK

     

    Visual Studio used a default template for the MVC project you just created. You have a working app right now by entering a project

    VS使用一个默认的项目模板。在你键入项目名称与选择少量选项之后就有了一个可以正常工作的 web 应用。

    name and selecting a few options. This is a simple starter project, and it's a good place to start,

    这是一个简单的入门项目,同时是一个很好的起点,

    Tap F5 to run the app in debug mode or Ctrl-F5 in non-debug mode.

    点击 F5 在调试模式下启动这个程序,或者 ctrl+F5 非调试模式下运行该程序。

     

    • Visual Studio starts IIS Express and runs your app. Notice that the address bar shows localhost:port# and not something

    VS启动 iis express 用于运行你的 app 程序。注意浏览器的地址栏显示的是ip+port,而不是常见的域名。

    like example.com. That's because localhost is the standard hostname for your local computer. When Visual Studio creates

    这是因为 localhost 是你本机的标准主机名。当VS创建一个新的web项目,

    a web project, a random port is used for the web server. In the image above, the port number is 5000. When you run the app,

    一个随机的端口会被 web server 选择使用。在上图中,端口是5000. 在你自己运行这个app的时候,

    you'll see a different port number.

    你可能会看到一个不同的端口。

    • Launching the app with Ctrl+F5 (non-debug mode) allows you to make code changes, save the file, refresh the browser, and

    在非调试模式下启动应用,允许你做一些代码变更,保存文件,刷新浏览器,并且

    see the code changes. Many developers prefer to use non-debug mode to quickly launch the app and view changes.

    查看变更。许多开发者更喜欢使用非调试模式快速启动应用并查看变更。

    • You can launch the app in debug or non-debug mode from the Debug menu item:

    你可以在 Debug 菜单已调试或非调试模式启动你的app:

     

    • You can debug the app by tapping the IIS Express button

    你可以通过点击 IIS Express 按钮启动调试程序

     

    The default template gives you working Home, About and Contact links. The browser image above doesn't show these links.

    默认的模板提供了 Home, About and Contact  三个链接与页面。上图中浏览器没有显示这些链接。

    Depending on the size of your browser, you might need to click the navigation icon to show them.

    因为依赖于你的浏览器宽度尺寸,你可能需要点击导航图标来显示他们。

     

    If you were running in debug mode, tap Shift-F5 to stop debugging.

    如果你在调试模式下运行,点击 Shift-F5 可以停止调试。

    In the next part of this tutorial, we'll learn about MVC and start writing some code.

    在接下来的教程中,我们将会开始学习 mvc 和如何开始写一些 代码 。

     

     

                                             蒙

                                        2017-07-12 11:05 周三

     

    转载于:https://www.cnblogs.com/Meng-NET/p/7154386.html

    展开全文
  • 本系类将会讲解asp.net core MVC中的内置过滤器的使用,将分为以下章节  asp.net core MVC 过滤器之ExceptionFilter过滤器(一)  asp.net core MVC 过滤器之ActionFilter过滤器(二)  asp.net core MVC 过滤器...
  • Find out how to use Docker in your ASP.NET Core MVC applications, and how containers make it easier to develop, deploy and manage those applications in production environments. Packed with examples ...
  • ASP.NET Core MVC (Razor)分部视图简介 ASP.NET Core MVC (Razor)分部视图基础教程 ASP.NET Core MVC (Razor)强类型分部视图教程 2、本教程环境信息 软件/环境 说明 操作系统 Windows 10 SDK 2.1.401 ...
  • ASP.NET Core快速入门(第6章:ASP.NET Core MVC)--学习笔记.pdf
  • ASP.NET Core MVC 视图引擎(Razor)简介 ASP.NET Core MVC 视图(Razor)ViewData使用示例 ASP.NET Core MVC 视图(Razor)ViewBag使用示例 ASP.NET Core NVC 视图(Razor)强类型传值(ViewModel)页示例 2、本教程环境信息...
  • ASP.NET Core MVC引导标记帮助器。 演示: : 该软件包包括用于以下引导程序组件的标记帮助器: 警报 徽章 面包屑 纽扣 轮播 坍方 落下 输入值 巨无霸 标签 列表组 媒体 模态 导航栏 页头 分页 面板 弹窗 进度条 ...
  • ASP.NET Core MVC (Razor)视图母版页教程 ASP.NET Core MVC (Razor)带有Section的视图母版页教程 ASP.NET Core MVC (Razor)视图全局代码(_ViewStart.cshtml)教程 2、本教程环境信息 软件/环境 说明 操作...
  • 主要给大家介绍了关于ASP.NET Core Mvc中空返回值的处理方法,文中通过示例代码介绍的非常详细,对大家学习或者使用ASP.NET Core Mvc具有一定的参考学习价值,需要的朋友们下面来一起看看吧
  • 本系类将会讲解asp.net core MVC中的内置全局过滤器的使用,将分为以下章节  asp.net core MVC 过滤器之ExceptionFilter过滤器(一)  asp.net core MVC 过滤器之ActionFilter过滤器(二)  asp.net core MVC ...
  • ASP.NET Core MVC 2.0 Cookbook ASP.NET Core MVC 2.0 Cookbook
  • ASP.NET Core MVC 视图.pdf

    2021-09-14 10:32:27
    ASP.NET Core MVC 视图.pdf
  • "Learning ASP.NET Core MVC Programming" English | ISBN: 1786463830 | 2016 | EPUB | 342 pages | 17 MB Key Features Get a first-principles coverage of ASP.NET MVC and the latest release, Core This book...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,549
精华内容 8,619
关键字:

asp.netcoremvc