文档显示了如何在发生异常时设置页面:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/error-handling
但是如何在我的服务器上的日志文件中记录异常的详细信息?
是否在任何地方默认记录异常和错误,或者我是否必须手动执行此操作?
有没有可用的示例或文档?
在我的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核心文档中找不到任何引用.这可能吗?
我在本文中学习了模块化整体项目结构:https://codewithmukesh.com/blog/modular-architecture-in-aspnet-core
其中大部分对我来说是有意义的,但我不太明白的是:
跨模块通信只能通过接口/事件/内存总线进行。跨模块数据库写入应保持最小或完全避免。
跨模块通信究竟是什么样子的?
假设我有 3 个模块:
我的安全模块注册了一个端点DisableUser。此端点的工作是更新User与Product处于禁用状态的用户关联的所有信息。
模块如何在工作单元中Security调用User和更新状态方法?Product
我的理解是,这种模式的目的是让以后更容易地将模块提取到微服务,所以我想将其作为某种任务可以更容易地更改为消息代理,但我只是不确定如何这应该看起来。
我的例子显然是人为的,我的主要观点是当涉及读/写时模块如何一起通信?
c# architecture design-patterns asp.net-core modular-monolith
我的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) 我正在测试这样的对象:
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)
但我仍然需要指定类型签名或它无效.
是否可以创建一个检查接口而不必指定类型的语句?
我有一个控制台应用程序,我想一个接一个地启动任务.
这是我的代码:
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,所以我想一个接一个地做.
为什么在开始下一次搜索之前没有等待一次搜索完成?
我需要向所有用户发送每日摘要电子邮件,但我不确定应该在哪里触发它。
我做了一个发送电子邮件的课程:
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#.NET Core 2.0控制台应用程序。我要部署它,因此它是一个单个.exe文件,所有相关文件都.dll包含在中.exe。
这可能吗?
我要执行此操作的原因是,我已经制作了多个控制台应用程序,并且希望将它们放置在同一文件夹中,以便只需要1个路径条目就可以从命令行使用它们。
如果发布,dotnet publish -c Release -r win10-x64则会得到一个,.exe但也会加载其他文件。
无论如何,要将所有这些关联的文件移动到一个命名的子文件夹,或者将它们全部包装在一个文件中?
我正在使用适用于 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) 当我创建构建管道时,它们在 AP 的构建部分中都具有相同的名称,但后面的括号中带有数字。
我怎样才能给它一个自定义名称?
我用谷歌搜索,答案是使用视觉设计器,但对我来说,不再有切换到视觉设计器的选项。我尝试name向管道添加属性,但这只是命名运行的构建,而不是构建配置。
我希望能够在运行之前查看我正在运行哪些构建。
c# ×8
asp.net-core ×4
.net-core ×2
architecture ×1
async-await ×1
azure ×1
azure-devops ×1
docker ×1
hangfire ×1
yaml ×1