MapWhen 在 Owin Startup 中的 Use 之前执行
MapWhen is executed before Use in Owin Startup
我有以下 Owin 启动文件:
public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
appBuilder
.Use(async (context, next) =>
{
appBuilder.Properties["User"] = "User1"; // MapWhen is called before this
await next.Invoke();
})
.MapWhen(
context => string.IsNullOrEmpty(appBuilder.Properties["User"] as string),
(builder) =>
{
builder.ThrowCustomException(); // This is called before setting the property
})
.MapWhen(
...
)
.MapWhen(
...
)
.Run(async context => {
await context.Response.WriteAsync(appBuilder.Properties["User"].ToString());
});
}
}
public static class Extensions
{
public static IAppBuilder ThrowCustomException(this IAppBuilder appBuilder)
{
throw new Exception();
}
}
我想将 appBuilder.Properties["User"]
属性 设置为某个值。我希望 属性 始终具有有效值。但是,当我 运行 应用程序时,如果 User 属性 没有值,则会抛出异常的 MapWhen() 函数在设置 User 属性 的值之前执行. Use()函数只在这个MapWhen()之后执行。
如何在 MapWhen() 函数执行前设置 User 属性 值?或者,有没有更好的方法在 MapWhen() 执行之前设置 属性 值?
您可以一起使用 IAppBuilder.Use
和终端中间件 IAppBuilder.Run
(构造最终响应,因此总是最后执行)。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app
.Use(async (context, next) =>
{
app.Properties["User"] = "User1";
await next();
})
.Run(async context => {
if (string.IsNullOrEmpty(app.Properties["User"] as string))
{
app.ThrowCustomException();
}
await context.Response.WriteAsync(app.Properties["User"].ToString());
});
}
我有以下 Owin 启动文件:
public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
appBuilder
.Use(async (context, next) =>
{
appBuilder.Properties["User"] = "User1"; // MapWhen is called before this
await next.Invoke();
})
.MapWhen(
context => string.IsNullOrEmpty(appBuilder.Properties["User"] as string),
(builder) =>
{
builder.ThrowCustomException(); // This is called before setting the property
})
.MapWhen(
...
)
.MapWhen(
...
)
.Run(async context => {
await context.Response.WriteAsync(appBuilder.Properties["User"].ToString());
});
}
}
public static class Extensions
{
public static IAppBuilder ThrowCustomException(this IAppBuilder appBuilder)
{
throw new Exception();
}
}
我想将 appBuilder.Properties["User"]
属性 设置为某个值。我希望 属性 始终具有有效值。但是,当我 运行 应用程序时,如果 User 属性 没有值,则会抛出异常的 MapWhen() 函数在设置 User 属性 的值之前执行. Use()函数只在这个MapWhen()之后执行。
如何在 MapWhen() 函数执行前设置 User 属性 值?或者,有没有更好的方法在 MapWhen() 执行之前设置 属性 值?
您可以一起使用 IAppBuilder.Use
和终端中间件 IAppBuilder.Run
(构造最终响应,因此总是最后执行)。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app
.Use(async (context, next) =>
{
app.Properties["User"] = "User1";
await next();
})
.Run(async context => {
if (string.IsNullOrEmpty(app.Properties["User"] as string))
{
app.ThrowCustomException();
}
await context.Response.WriteAsync(app.Properties["User"].ToString());
});
}