问题描述
启动:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<RandomCounter>();
services.AddTransient<ICounter>(provider =>
{
var counter = provider.GetService<RandomCounter>();
return counter;
});
services.AddTransient<CounterService>();
}
public void Configure(IApplicationBuilder app)
{
app.UseMiddleware<CounterMiddleware>();
}
}
对于每个新请求,计数器增加 2。我希望每次新调用计数器增加 1。在这种情况下我该怎么办?或者在这里我只需要为每个新请求添加一个条件:?
中间件:
using Dependency.Services;
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Dependency
{
public class CounterMiddleware
{
private readonly RequestDelegate _next;
private int i = 0;
public CounterMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext httpContext,ICounter counter,CounterService counterService)
{
i++;
httpContext.Response.ContentType = "text/html; charset=utf-8";
await httpContext.Response.WriteAsync($"Request {i}; Counter: {counter.Value}; Service: {counterService.Counter.Value}");
}
}
}
解决方法
public async Task InvokeAsync(HttpContext httpContext,ICounter counter,CounterService counterService)
{
if (httpContext.Request.Path.HasValue && !httpContext.Request.Path.Value.StartsWith("/favicon.ico"))
{
i++;
httpContext.Response.ContentType = "text/html; charset=utf-8";
await httpContext.Response.WriteAsync($"Request {i}; Counter: {counter.Value}; Service: {counterService.Counter.Value}");
}
}