小编Dan*_*ele的帖子

Async WebApi Thread.CurrentCulture

我有一个自托管的OWIN托管Web API项目,为我提供了一些基本的REST方法.

我想要多语言错误消息,所以我使用资源文件和BaseControllerThread.CurrentCultureThread.CurrentUICulture设置为请求的Accept-Language标头.

public override Task<HttpResponseMessage> ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)
{
    if (controllerContext.Request.Headers.AcceptLanguage != null && 
        controllerContext.Request.Headers.AcceptLanguage.Count > 0)
    {
        string language = controllerContext.Request.Headers.AcceptLanguage.First().Value;
        var culture = CultureInfo.CreateSpecificCulture(language);

        Thread.CurrentThread.CurrentCulture = culture;
        Thread.CurrentThread.CurrentUICulture = culture;
    }

    base.ExecuteAsync(controllerContext, cancellationToken);
}
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但如果我使我的控制器方法异步,问题就出现了.

当我在方法中使用await时,它可能会在另一个线程中继续,因此我的CurrentCultureCurrentUICulture会丢失.

这是我用来找到这个问题的一个小例子.

public async Task<HttpResponseMessage> PostData(MyData data)
{
    Thread currentThread = Thread.CurrentThread;

    await SomeThing();

    if (Thread.CurrentThread.CurrentCulture != currentThread.CurrentCulture)
        Debugger.Break(); …
Run Code Online (Sandbox Code Playgroud)

c# culture multithreading asynchronous asp.net-web-api

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

NuGet包未从引用的项目中复制

我有一个非常奇怪的错误,我没有解释.

所以我的设置非常简单:

我有一个包含2个项目的解决方案,我们将它们命名为ProjectAProjectB. ProjectA引用了一些NuGet包,如果构建ProjectA,我可以看到输出目录中的所有程序集,bin文件夹. ProjectB现在引用ProjectA,但是如果我构建ProjectB,我在输出目录中有ProjectA程序集,而不是ProjectA引用的NuGet包.

ProjectBProjectA的引用添加了引用 - >添加引用... - >解决方案 - > ProjectA.

我还创建了一个涵盖这个案例的小测试项目,但它在我的测试项目中运行得很好.

有任何想法吗?

reference visual-studio nuget

10
推荐指数
2
解决办法
7369
查看次数