我使用 .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 框架项目中使用 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”类型的控制器时发生错误。确保控制器具有无参数公共构造函数。
我是 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 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 具有无效的子元素 …
.net ×3
c# ×3
autofac ×2
.net-core ×1
asp.net-core ×1
ilogger ×1
swagger ×1
swagger-ui ×1
swashbuckle ×1