C#WebApi - Asp Net Core 2 - 如何以编程方式将csproj名称放入路径中?

时间:2018-04-24 19:15:04

标签: c# asp.net asp.net-core

编辑:要清楚,我真的不关心它是否是csproj。我只是希望能够为我的所有路由全局定义根名称。

我是dotnet core 2和c#的新手。我正在构建一个webapi模板供我的团队其他人使用,但我希望能够将csproj名称作为路由的一部分,这样人们就不必在每个控制器中更改它。

例如:

WebStoreAbc.csproj
--------

[Route("api/v1/#CSPROJNAME#/products")]
public class ProductsController : Controller
{
  ... controller logic ...
}


Registers at runtime as:
/api/v1/WebStoreAbc/products

这样,每次我从模板创建一个新项目时,我都不必为一堆控制器配置路由。

编辑2:我在下面使用了Mahmoud Heretani的答案并进行了调整。

string projectName = "template";

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "api/v1/" + projectName.ToLower() + "/{controller=Home}/{action=Index}/{id?}");
    });
}

1 个答案:

答案 0 :(得分:2)

它认为你不能在[Route]属性中插入一个变量,因为它需要一个常量值,但是你的Configure方法中的一个简单技巧应该可以解决这个问题:

 var projectName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "api/v1/" + projectName + "/{controller=Home}/{action=Index}/{id?}");
        });

但是在你的情况下,我建议你创建一个程序集(类库)包含一个使用程序集名称配置路由的方法(就像前面的例子一样),然后在你的项目中使用这个方法。