ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Asp.net Core

2021-10-27 10:04:31  阅读:235  来源: 互联网

标签:Core Asp return IActionResult Route public net id 路由


1路由

  路由模版:

  (1)在startup.cs或者属性中定义

  (2描述URL路径如何匹配Actions

    (3)用于产生URLs链接,这些产生的链接通常在响应中返回

     路由两种:传统路由和属性路由。将路由放置在Controller或Action上使它成为属性路由。终端路由-在ASP.NET Core 3.0中新增的默认路由系统。

     路由配置:UseRouting(),UseEndpoints。调用UseEndpoints的MapControllers方法匹配Controller的属性路由,调用MapControllerRoute或MapAreaControllerRoute匹配传统路由和属性路由。

     1.1 传统路由

  传统路由只匹配app中定义的Action和Contoller的联合,这是为了简化传统路由重叠的场景。使用MapControllerRoute,MapDefaultControllerRoute和MapAreaContollerRoute自动基于触发顺序给它们的

    enderpoints赋值(顺序)。路由出现的越早,具有更高的优先级。传统路由依赖顺序。一般而言,带有area的路由应该放置在前面因为它们比没有area的路由更加具体。专用传统路由匹配所有的路由参数例如{*article}使路由匹配范围太广,意味着你想匹配的其他路由会被它匹配上,将这种路由放置在路由表后面来阻止无匹配。

     public IActionResult Edit(int id)
        {
            return ControllerContext.MyDisplayRouteInfo(id);
        }

        [HttpPost]
        public IActionResult Edit(int id, Product product)
        {
            return ControllerContext.MyDisplayRouteInfo(id, product.name);
        }

/Products33/Edit/17 ,Post请求时匹配下面,其他请求时匹配上面

路由名称在应用范围内必须是唯一的,对URL匹配和处理请求无影响,只用于产生URL。

1.2 属性路由

 REST API应该使用属性路由来将app的功能建模成一组资源(操作由HTTP动词表示)。属性路由使用一系列属性来匹配Action。属性路由匹配更加具体。使用属性路由,Contoller和Action的名称就无所谓了,除非使用了令牌替换。

        [Route("")]
        [Route("Home")]
        [Route("Home/Index")]
        [Route("Home/Index/{id?}")]
        public IActionResult Index(int? id )
        {
            return View();
        }

        [Route("Home/Privacy")]
        [Route("Home/Privacy/{id?}")]
        public IActionResult Privacy(int? id)
        {
            return View();
        }        
 [Route("")]
    [Route("Home")]
    [Route("Home/Index")]
    [Route("Home/Index/{id?}")]
    public IActionResult MyIndex(int? id)
    {
        return ControllerContext.MyDisplayRouteInfo(id);
    }

    [Route("Home/About")]
    [Route("Home/About/{id?}")]
    public IActionResult MyAbout(int? id)
    {
        return ControllerContext.MyDisplayRouteInfo(id);
    }

使用令牌替换

   [Route("")]
    [Route("Home")]
    [Route("[controller]/[action]")]
    public IActionResult Index()
    {
        return ControllerContext.MyDisplayRouteInfo();
    }

    [Route("[controller]/[action]")]
    public IActionResult About()
    {
        return ControllerContext.MyDisplayRouteInfo();
    }

保留路由名称:action,area,controller,hanler,page

HTTP 动词模板:[HttpGet] [HttpPost] [HttpPut] [HttpDelete] [HttpHead] [HttpPatch]

[Route("api/[controller]")]
[ApiController]
public class Test2Controller : ControllerBase
{
    [HttpGet]   // GET /api/test2
    public IActionResult ListProducts()
    {
        return ControllerContext.MyDisplayRouteInfo();
    }

    [HttpGet("{id}")]   // GET /api/test2/xyz
    public IActionResult GetProduct(string id)
    {
       return ControllerContext.MyDisplayRouteInfo(id);
    }

    [HttpGet("int/{id:int}")] // GET /api/test2/int/3
    public IActionResult GetIntProduct(int id)
    {
        return ControllerContext.MyDisplayRouteInfo(id);
    }

    [HttpGet("int2/{id}")]  // GET /api/test2/int2/3
    public IActionResult GetInt2Product(int id)
    {
        return ControllerContext.MyDisplayRouteInfo(id);
    }
}

{id:int}限制了id参数必须可以转换成整数,否则不匹配路由。  

2 配置(appsettings.json)

 3 运行发布

  将应用程序输出类型设置为类库时,报“无法运行项目,RunnCommand属性未定义”的错误,发布的文件无法成功启动(无论是独立版本还是框架依赖版本)。但若将项目设置成控制台应用程序,发布时会生成无效的.exe文件(测试结果显示可能还不是本程序对应的exe)

  

 CubeDemoNC程序发布可以成功运行,但vs中调试时,本地静态文件(css,js)无法加载报错

标签:Core,Asp,return,IActionResult,Route,public,net,id,路由
来源: https://www.cnblogs.com/mbaymax/p/13359152.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有