小编dim*_*its的帖子

当我返回 HttpResponseMessage 类型时,示例值和模型在 swagger ui 中为空

我使用 .net 框架和 nuget 包 Swashbuckle。我有带有方法的控制器

    [HttpGet]
    [ActionName("getProductById")]
    public HttpResponseMessage GetProductById([FromUri] int id)
    {
        Product response = service.GetProductById(id);
        if (response != null)
        {

            return Request.CreateResponse<Product>(HttpStatusCode.OK, response);
        }
        return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Not Found");
    }
Run Code Online (Sandbox Code Playgroud)

SwaggerConfig 是

    [assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]

namespace ProductsApp
{
    public class SwaggerConfig
    {
        public static void Register()
        {
            var thisAssembly = typeof(SwaggerConfig).Assembly;

            GlobalConfiguration.Configuration
                .EnableSwagger(c =>
                    {
                        c.SingleApiVersion("v1", "ProductsApp");
                    })
                .EnableSwaggerUi(c =>
                    {

                    });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是现在当我运行项目和 url localhost:61342/swagger/ui/index 时,我遇到示例值和模型为空的问题。 https://prnt.sc/o7wlqe

当我修改方法以仅返回产品时就可以了。

    [HttpGet]
    [ActionName("getProductById")]
    public Product GetProductById([FromUri] int id) …
Run Code Online (Sandbox Code Playgroud)

.net asp.net-web-api swagger swagger-ui swashbuckle

6
推荐指数
1
解决办法
1392
查看次数

如何使用 DI 使用 inq autofac .net 框架注册 ILogger(Microsoft.Extensions.Logging)

我在 .net 框架项目中使用 Microsoft.Extensions.Logging 中的 ILogger。现在我想在容器中注册 ILogger 但我不能。所有答案都是关于 .net core 的。我尝试

var builder = new ContainerBuilder();

builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

//first try
builder.RegisterGeneric(typeof(Logger<>)).As(typeof(ILogger<>));
IServiceCollection services = new ServiceCollection();

//second try
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
IContainer container = builder.Build();

httpConfig.DependencyResolver = new AutofacWebApiDependencyResolver(container);
Run Code Online (Sandbox Code Playgroud)

我的班级也是

public class TestController : ApiController
{
    private readonly ILogger<TestController > _logger;
    private readonly IService _service;

    public TestController (IService service, ILogger<TestController > logger)
        {
            _service = service;
            _logger = logger;
        }
}
Run Code Online (Sandbox Code Playgroud)

di 是正确的,因为其他服务已注入正确的。当我在构造函数中包含记录器时,我收到消息尝试创建“TestController”类型的控制器时发生错误。确保控制器具有无参数公共构造函数。

.net c# dependency-injection autofac ilogger

6
推荐指数
1
解决办法
7453
查看次数

DI Autofac 中的 RegisterInstance 和 RegisterType 有什么区别

我是 Autofac 的新手,我试图了解 Web api 2(.Net 框架)中 RegisterInstance 和 RegisterType 之间的区别。在他的文档中有一个简单的 例子

var builder = new ContainerBuilder();


// Register individual components
builder.RegisterInstance(new TaskRepository())
       .As<ITaskRepository>();
builder.RegisterType<TaskController>();
builder.Register(c => new LogManager(DateTime.Now))
       .As<ILogger>();

// Scan an assembly for components
builder.RegisterAssemblyTypes(myAssembly)
       .Where(t => t.Name.EndsWith("Repository"))
       .AsImplementedInterfaces();

var container = builder.Build();
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?

.net c# dependency-injection autofac asp.net-web-api2

4
推荐指数
1
解决办法
2689
查看次数

限制.net core中的并发请求

我正在尝试配置我的 .net core API 以限制请求。

为了实现这一点,我修改了program.cs类,例如

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();            
    }


    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.ConfigureKestrel(serverOptions =>
                {
                    serverOptions.Limits.MaxConcurrentConnections = 2;
                })
                //.UseContentRoot(Directory.GetCurrentDirectory())
                //.UseIISIntegration()
                .UseStartup<Startup>();
            });
}
Run Code Online (Sandbox Code Playgroud)

但问题是,当我使用超过 2 个线程的控制台应用程序调用 API 时,我会收到所有线程调用的响应。我已经在本地 IIS 电脑上部署-发布了 API。

我认为我必须只得到 2 个响应,然后对于其他呼叫我将得到 503 服务不可用。

我的代码有什么问题吗?

编辑 我已阅读这篇文章How to configure concurrency in .NET Core Web API? ,问题是当我添加 web.config 时

 <configuration>
    <system.web>
        <applicationPool
            maxConcurrentRequestsPerCPU="5000"
            maxConcurrentThreadsPerCPU="0"
            requestQueueLimit="5000" />
    </system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我有警告

元素系统。web 具有无效的子元素 …

c# .net-core asp.net-core

1
推荐指数
1
解决办法
2万
查看次数