Asp.net Core

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)无法加载报错

原文地址:https://www.cnblogs.com/mbaymax/p/13359152.html