共享默认MVC控制器

时间:2017-07-20 09:21:39

标签: .net asp.net-mvc .net-core

目前我正在构建许多小型API。其中许多项目共享一些基本的控制器逻辑。有没有办法将它们添加到nuget包中并在启动时使用它们? 例如。比如添加Mvc:

IApplicationBuilder app;    
....    

app.UseMvc;
app.UseBasicApiVersionController();

我们的想法是在所有微服务中都有版本端点 例如:
http://url/version
返回{"版本":" 1.0.0" }
我怎么把它变成一个nuget包呢? 因此,所有开发人员只需添加1行代码即可将此端点添加到其微服务中?我们正在使用dotnet核心 不要自己创建nuget包:)

我对入门的猜测与此类似:

public static IApplicationBuilder UseBasicApiVersionController(this IApplicationBuilder app)
    {
      if (app == null)
        throw new ArgumentNullException("app");

      ..... // What should I do?

      return app;
    }

*编辑:
如果您向nuget包项目添加控制器,它将被自动检测。但这不是我想要的功能。
我可能有10个需要该控制器的服务。虽然有1-2个服务只需要其他版本控制逻辑。例如。面向App的客户不应该拥有" / version"端点。
这就是为什么我在启动时想要使用app.UseBasicApiVersionController();

1 个答案:

答案 0 :(得分:0)

如果只是版本,您可以添加共享扩展程序或返回版本的中间件。

public class VersionMiddleware: OwinMiddleware
{
    private static readonly PathString Path = new PathString("/version");
    private OwinMiddleware Next;

    public VersionMiddleware(OwinMiddleware next) : base(next)
    {
        Next = next;
    }

    public async override Task Invoke(IOwinContext context)
    {

        if (!context.Request.Path.Equals(Path))
        {
            await Next.Invoke(context);
            return;
        }

        var version = Assembly.[HowToGetYourVersionAsAnObject]

        context.Response.StatusCode = (int)HttpStatusCode.OK;
        context.Response.ContentType = "application/json";
        context.Response.Write(JsonConvert.SerializeObject(responseData));
    }
}