小编Gue*_*lla的帖子

记录asp.net core/kestrel中的异常

文档显示了如何在发生异常时设置页面:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/error-handling

但是如何在我的服务器上的日志文件中记录异常的详细信息?

是否在任何地方默认记录异常和错误,或者我是否必须手动执行此操作?

有没有可用的示例或文档?

c# asp.net-core

6
推荐指数
1
解决办法
7115
查看次数

在查询参数中重写正斜杠

在我的asp.net核心应用程序(角4前端)我接受这样的URL:

example.com/report;url=http%3A%2F%2Fexample2.com
Run Code Online (Sandbox Code Playgroud)

我想创建一个允许人们输入以下网址的重写规则:

example.com/report;url=http://example2.com
Run Code Online (Sandbox Code Playgroud)

我无法找到如何做到这一点.

我试过了:

var options = new RewriteOptions()
    .AddRewrite(@"(.*);url=http:\/\/([^;]*)(.*)", "$1;url=http%3A%2F%2F$2$3", skipRemainingRules: false)
    .AddRewrite(@"^report.*", "index.html", skipRemainingRules: true)

app.UseRewriter(options);
Run Code Online (Sandbox Code Playgroud)

这不起作用,但即使这样做也不会解释在域之后有斜杠的URL,即子目录.使用组匹配模式我认为不可能这样做.它必须是匹配组上的查找和替换类型操作.

其他Web服务器将此作为解码斜杠的可配置选项.我在asp.net核心文档中找不到任何引用.这可能吗?

c# asp.net-core-mvc kestrel-http-server asp.net-core

6
推荐指数
1
解决办法
929
查看次数

模块化整体中的跨模块通信

我在本文中学习了模块化整体项目结构:https://codewithmukesh.com/blog/modular-architecture-in-aspnet-core

其中大部分对我来说是有意义的,但我不太明白的是:

跨模块通信只能通过接口/事件/内存总线进行。跨模块数据库写入应保持最小或完全避免。

跨模块通信究竟是什么样子的?

假设我有 3 个模块:

  • 产品
  • 用户
  • 安全

我的安全模块注册了一个端点DisableUser。此端点的工作是更新UserProduct处于禁用状态的用户关联的所有信息。

模块如何在工作单元中Security调用User和更新状态方法?Product

我的理解是,这种模式的目的是让以后更容易地将模块提取到微服务,所以我想将其作为某种任务可以更容易地更改为消息代理,但我只是不确定如何这应该看起来。

我的例子显然是人为的,我的主要观点是当涉及读/写时模块如何一起通信?

c# architecture design-patterns asp.net-core modular-monolith

6
推荐指数
1
解决办法
4807
查看次数

StyleBundle呈现为ScriptBundle

我的CSS StyleBundle是在<script>标签而不是<link>标签中呈现的.

这让我摸不着头脑.我一直在寻找我的错字,但一切都很好.

这是我的BundleConfig.cs

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                "~/Scripts/jquery-{version}.js"));

    bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
    "~/Scripts/jquery-ui-{version}.js"));

    bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                "~/Scripts/jquery.validate*"));

    bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
                "~/Scripts/modernizr-*"));

    bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
              "~/Scripts/bootstrap.js",
              "~/Scripts/respond.js"));

    bundles.Add(new StyleBundle("~/Content/css").Include(
              "~/Content/bootstrap.css",
              "~/Content/site.css"));


    bundles.Add(new StyleBundle("~/Content/themes/base/css").Include(
              "~/Content/themes/base/all.css"));

    BundleTable.EnableOptimizations = false;
}
Run Code Online (Sandbox Code Playgroud)

这是我的_Layout.cshtml的头:

<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>@ViewBag.Title - My ASP.NET Application</title>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")
    @Scripts.Render("~/Content/themes/base/css")
    @RenderSection("head", required: false)
</head>
Run Code Online (Sandbox Code Playgroud)

这就是HTML的呈现方式:

<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Home Page - My ASP.NET Application</title>
    <link href="/Content/bootstrap.css" …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc-5

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

是否可以查看对象是否继承了没有泛型类型参数的IDictionary?

我正在测试这样的对象:

if (item is IDictionary<object, object>)
Run Code Online (Sandbox Code Playgroud)

但这与所有其他类型的组合<sting, object>, <int, string>等都不匹配......

我只是想知道它是否已经实现了接口,无论它使用什么泛型类型.

我找到了一个例子说它有可能做类似的事情:

dictionary.GetType().GetInterfaces().Any(x => x.GetGenericTypeDefinition == typeof(IDictionary<>));
Run Code Online (Sandbox Code Playgroud)

但我仍然需要指定类型签名或它无效.

是否可以创建一个检查接口而不必指定类型的语句?

c#

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

Task.Wait()没有等待任务完成

我有一个控制台应用程序,我想一个接一个地启动任务.

这是我的代码:

static void Main()
{
    string keywords = "Driving Schools,wedding services";
    List<string> kwl = keywords.Split(',').ToList();

    foreach(var kw in kwl)
    {
        Output("SEARCHING FOR: " + kw);
        Task t = new Task(() => Search(kw));
        t.Start();
        t.Wait();
    }

    Console.ReadLine();
}

static async void Search(string keyword)
{
    // code for searching
}
Run Code Online (Sandbox Code Playgroud)

问题是它不会等待第一个任务完成执行.它同时触发后续任务.

我正在使用速率有限的API,所以我想一个接一个地做.

为什么在开始下一次搜索之前没有等待一次搜索完成?

c# async-await

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

使用 hang-fire 和 ASP.NET Core 发送每日摘要电子邮件

我需要向所有用户发送每日摘要电子邮件,但我不确定应该在哪里触发它。

我做了一个发送电子邮件的课程:

public class SummaryEmailBusiness
{
    private MyDbContext _db;
    private IEmailSender _emailSender;

    public SummaryEmailBusiness(MyDbContext db, IEmailSender emailSender)
    {
        _db = db;
        _emailSender = emailSender;
    }

    public void SendAllSummaries()
    {
        foreach(var user in _db.AspNetUsers)
        {
            //send user a summary
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在ConfigureServices()我注册了服务和hangfire:

services.AddHangfire(config =>
    config.UseSqlServerStorage(Configuration.GetConnectionString("DefaultConnection")));

services.AddTransient<SummaryEmailBusiness>();
Run Code Online (Sandbox Code Playgroud)

并在Configure() 添加

app.UseHangfireDashboard();
app.UseHangfireServer();
Run Code Online (Sandbox Code Playgroud)

现在我被困住了。Hang-fire 文档说我需要做类似的事情:

RecurringJob.AddOrUpdate(() =>  SendAllSummaries() , Cron.Daily);
Run Code Online (Sandbox Code Playgroud)

我不确定如何执行此操作,以便通过注入的依赖服务启动该类。如何引用SendAllSummaries()实例化服务的方法?

什么是最好的方法来做到这一点?

c# hangfire asp.net-core

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

使.net核心控制台应用程序成为单个.exe

我有一个C#.NET Core 2.0控制台应用程序。我要部署它,因此它是一个单个.exe文件,所有相关文件都.dll包含在中.exe

这可能吗?

我要执行此操作的原因是,我已经制作了多个控制台应用程序,并且希望将它们放置在同一文件夹中,以便只需要1个路径条目就可以从命令行使用它们。

如果发布,dotnet publish -c Release -r win10-x64则会得到一个,.exe但也会加载其他文件。

无论如何,要将所有这些关联的文件移动到一个命名的子文件夹,或者将它们全部包装在一个文件中?

c# .net-core

5
推荐指数
2
解决办法
2718
查看次数

在 Azure 容器应用服务中运行的远程调试 .net 核心应用

我正在使用适用于 Linux 容器的 Azure 应用服务。我已按照他们的说明启用 SSH ( https://docs.microsoft.com/en-us/azure/app-service/containers/configure-custom-container#enable-ssh )。

这有效,但它不会在公共端口上公开 SSH。您必须通过他们的界面,所以我不知道我打算如何设置 VSDBG。

远程调试说明在这里:https : //github.com/Microsoft/MIEngine/wiki/Offroad-Debugging-of-.NET-Core-on-Linux---OSX-from-Visual-Studio

它的工作原理是通过 SSH 将 Visual Studio 连接到服务器上的进程。

看到 Azure 是 Microsoft 产品,我必须假设他们的生态系统有一种方法可以连接到调试会话,但我找不到说明如何操作的文档。

如何在应用服务中调试 linux 容器?

编辑:

我在 VS2017 中发现了云资源管理器,它有一个附加选项,但它给出了错误:

System.Runtime.InteropServices.COMException (0x89710023): Unable to connect to the Microsoft Visual Studio Remote Debugger named 'gardner.azurewebsites.net'.  The input data was not in the expected format or did not have the expected value.

   at Microsoft.VisualStudio.Debugger.Interop.Internal.IDebuggerInternal120.ConnectToServer(String szServerName, VsDebugRemoteConnectOptions[] pConnectOptions, CONNECT_REASON ConnectReason, Int32 fIncrementUsageCount, IDebugCoreServer3& ppServer)
   at Microsoft.VisualStudio.Web.Azure.MicrosoftWeb.Operations.RemoteDiagnosticsSessionBase.ConnectToServer(String site, String user, …
Run Code Online (Sandbox Code Playgroud)

azure docker .net-core

5
推荐指数
0
解决办法
683
查看次数

如何命名管道?

当我创建构建管道时,它们在 AP 的构建部分中都具有相同的名称,但后面的括号中带有数字。

我怎样才能给它一个自定义名称?

我用谷歌搜索,答案是使用视觉设计器,但对我来说,不再有切换到视觉设计器的选项。我尝试name向管道添加属性,但这只是命名运行的构建,而不是构建配置。

我希望能够在运行之前查看我正在运行哪些构建。

yaml azure-devops azure-pipelines

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