小编LP1*_*P13的帖子

处理asp.net核心中的异常?

我有asp.net核心应用程序.当存在异常时(在非开发环境中),configure方法的实现将用户重定向到"Error"页面

但是,只有在控制器内发生异常时,它才有效.如果异常发生在控制器之外,例如在我的自定义中间件中,则用户不会被重定向到错误页面.

如果中间件中存在异常,如何将用户重定向到"错误"页面.

     public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        app.UseApplicationInsightsRequestTelemetry();

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseBrowserLink();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

        app.UseApplicationInsightsExceptionTelemetry();

        app.UseStaticFiles();
        app.UseSession();
        app.UseMyMiddleware();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }
Run Code Online (Sandbox Code Playgroud)

更新1
我更新了上面的代码,其中包含初始帖子中缺少的以下两行.

        app.UseSession();
        app.UseMyMiddleware();
Run Code Online (Sandbox Code Playgroud)

另外我发现为什么app.UseExceptionHandler无法重定向到错误页面.
当我的中间件代码中有异常时,app.UseExceptionHandler("\Home\Error")重定向到\Home\Error预期; 但由于这是一个新请求,我的中间件再次执行并再次抛出异常.
所以为了解决这个问题,我改变了我的中间件只执行if context.Request.Path != "/Home/Error"

我不确定这是解决这个问题的正确方法,但是它的工作原理.

public class MyMiddleWare
{
    private readonly RequestDelegate _next;
    private readonly IDomainService _domainService;

    public MyMiddleWare(RequestDelegate next, IDomainService domain)
    {
        _next = next;
        _domainService …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core-mvc coreclr asp.net-core

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

如何在同一台机器上配置多个ASPNETCORE_ENVIRONMENT?

我有ASP.NET核心Web应用程序.我已在Web服务器上配置Web应用程序并将ASPNETCORE_ENVIRONMENT变量设置为Development.我将此变量设置为机器级别,如下图所示.现在在同一台机器上,我想配置一个与Staging环境相同的Web应用程序实例.

我在这里设置ASPNETCORE_ENVIRONMENT应用程序级别而不是机器级别有什么选择?所以我可以在同一台机器上托管同一个应用程序的多个实例?

在此输入图像描述

在此输入图像描述

asp.net-core-mvc .net-core coreclr asp.net-core

16
推荐指数
1
解决办法
2905
查看次数

如何设置创建日期和修改日期以在DB第一种方法中进行设置

在我们的应用程序的每个SQL表中,我们都有"CreatedDate"和"ModifiedDate"列.我们正在使用DB第一种方法.当我保存数据时,我希望自动填充这两列.一种方法是getdate()在SQL表列本身上使用默认值.所以这将部分地解决问题.这意味着当实体是新的时,它将设置CreatedDate和ModifiedDate.但是,当我编辑/更新实体时,我只想ModifiedDate更新.
使用Code第一种方法有很多文章在做这件事.但我们正在使用DB第一种方法.
我有什么选择?

entity-framework ef-database-first

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

我们需要依赖注入的接口吗?

我有一个ASP.NET核心应用程序.该应用程序有很少的辅助类可以完成一些工作.每个类都有不同的签名方法.我在网上看到很多.net核心示例,它们为每个类创建接口,然后使用DI框架注册类型.例如

 public interface IStorage
 {
    Task Download(string file);
 }

 public class Storage
 {
    public Task Download(string file)
    {
    }
 }

 public interface IOcr
 {
     Task Process();
 }

 public class Ocr:IOcr
 {
    public Task Process()
    {

    }
 }
Run Code Online (Sandbox Code Playgroud)

基本上每个接口只有一个类.然后我用DI注册这些类型

 services.AddScoped<IStorage, Storage>();
 services.AddScoped<IOcr,Ocr>();
Run Code Online (Sandbox Code Playgroud)

但是我可以在没有接口的情况下注册类型,这样接口看起来多余 例如

 services.AddScoped<Storage>();
 services.AddScoped<Ocr>();
Run Code Online (Sandbox Code Playgroud)

所以我真的需要接口吗?

asp.net-core-mvc .net-core coreclr asp.net-core

15
推荐指数
2
解决办法
8859
查看次数

如何在Hangfire中调用异步方法?

我有asp.net核心API应用程序,这是我第一次使用HangFire.

在.Net Core应用程序中,我的所有方法都是异步的.基于SO Post,wait()在hangfire中调用异步方法时使用它并不是一个好主意.
另外,根据v1.6.0中的hangfire支持问题,添加了异步支持.我使用的是1.6.12版,但我仍然没有看到异步支持.

我如何调用异步方法Enqueue.目前我正在使用wait()

public class MyController : Controller
{
    private readonly Downloader _downlaoder;
    private readonly IBackgroundJobClient _backgroungJobClient;
    public MyController(Downloader downloader, IBackgroundJobClient backgroungJobClient)
    {
        _downlaoder = downloader;
        _backgroungJobClient = backgroungJobClient;
    }

    [HttpPost]
    public void Post([FromBody]IEnumerable<string> files)
    {
        _backgroungJobClient.Enqueue(() => _downloader.DownloadAsync(files).Wait());
    }
}
Run Code Online (Sandbox Code Playgroud)

c# hangfire .net-core asp.net-core

15
推荐指数
1
解决办法
9536
查看次数

为本地主机上的任何端口启用 CORS

在 asp.net core 中,我可以使用中间件在此处描述的某些方法上启用 CORS

我想知道是否可以为任何方案和任何端口启用 CORS localhost(仅用于测试目的)。我试过通配符,但它不起作用

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        if(_environment.IsDevelopment())
        {
              options.AddDefaultPolicy(
                 builder =>
                 {
                     builder.WithOrigins("http://localhost/*",
                                         "https://localhost/*");
                 });
             });
        }
        else
        {
            options.AddDefaultPolicy(
                 builder =>
                 {
                     builder.WithOrigins("http://example.com",
                                         "http://www.contoso.com");
                  });
             });
        }

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core

14
推荐指数
1
解决办法
7361
查看次数

无需更改 .NET 中的代码即可启用 TLS 1.2

我有 .NET 4.5.2 应用程序用于SmtpClient发送电子邮件。该应用程序安装在Windows 2012 R2服务器上。当我禁用 TLS 1 和 TLS 1.1 并仅启用 TLS 1.2 时,应用程序停止发送邮件。我认为这是因为 .NET 4.5.2 不支持 v1.2。

我正在考虑以下步骤

1> 在 Windows Server 上禁用 TLS 1 和 TLS 1.1,仅启用 TLS 1.2。
2>在Windows服务器上安装.NET 4.8。
3>将应用程序的目标框架更改为4.8(在csproj和web.config中)并重新编译。
4>部署应用程序。


基于文档的 问题Starting with .NET Framework 4.7.1, WCF defaults to the operating system configured version
1>这仅适用于 WCF 还是 SMTP 也默认为操作系统配置的版本?
2> 或者我是否需要明确设置版本,例如System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
3> 现在是否可以设置版本 TLS 1.2,并且将来 TLS 1.3 可用时应用程序应自动默认为 TLS 1.3?(无需再次更改代码)

.net c# smtpclient tls1.2 .net-4.8

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

'Serilog'已经为'Microsoft.CSharp'定义了一个依赖项

我试图安装serilog,我收到错误

PM> Install-Package Serilog
Install-Package:'Serilog'已经
为'Microsoft.CSharp'定义了一个依赖项.在行:1 char:1
+ Install-Package Serilog
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo:NotSpecified :( :) [Install-Package],出现InvalidOperationException
+ FullyQualifiedErrorId:NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand

Microsoft.CSharp 已在我的项目中引用

serilog rollingfilesink

11
推荐指数
1
解决办法
5447
查看次数

EntityFramework核心数据库首先接近多个表名

我们有现有的具有多个表名的数据库.例如Documents.我想使用新的EF CoreAsp.Net Core基于这篇文章与数据库的第一种方法在这里

我运行以下命令从现有数据库创建模型

Scaffold-DbContext"Server =(local); Database = MyDatabase; Trusted_Connection = True;"Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

但是,当我运行scaffolding命令时,它会创建具有多个名称的模型.例如,Documents表转换为模型名称Documents.

如何更改它以便它可以使用模型的单一命名约定?(我不能改变数据库中的表名)

请注意,我已经阅读了与相同问题相关的SO上的一些帖子,但他们主要关注代码第一种方法.我正在使用数据库第一种方法.

c# entity-framework-core asp.net-core

11
推荐指数
3
解决办法
6849
查看次数

如何从发布中排除某些 appsettings 文件

我有asp.net core 2 应用程序。根据文档,.pubxml为我的开发环境创建了文件。我正在使用 Web 部署(远程代理)将 Web 包部署到目标 Web 服务器。在我们安装了 jenkins 的构建服务器上,我运行以下命令来构建和部署

D:\Jenkins\myproject\workspace\myapplication\Src\Api>dotnet publish Api.csproj /p:PublishProfile=development.pubxml
Run Code Online (Sandbox Code Playgroud)

它成功构建应用程序并将其部署到目标 Web 服务器。

但是,我的应用程序有多个appsettings特定于每个环境的文件。例如appsettings.jsonappsettings.development.jsonappsettings.staging.jsonappsettings.production.json部署过程部署所有的AppSettings文件到Web服务器。(在这种情况下开发网络服务器)

我如何只包含特定于环境的 appsettings 文件?(在这种情况下,我想部署appsettings.jsonappsettings.development.json但不是其他 2 个文件)

msbuild web-deployment-project web-deployment coreclr asp.net-core-2.0

11
推荐指数
2
解决办法
4908
查看次数