我有一个ASP.Net Core 2 Web API项目。我Configure在Startup.cs文件中的方法中
添加了以下内容app.UseExceptionHandler();
我在邮递员测试中注意到,我得到的是“无法获得答复”结果。服务器端日志记录显示该错误与数据库中缺少表有关。可以,我可以解决。但是我的问题是,为什么服务器不会返回500 Internal Server Error?为什么死了,对邮递员根本没有任何回应?
因此,在我的控制器中,我故意抛出一个异常以测试处理程序,并从Postman调用URL,实际上,正如我所料,我得到了500 Internal server error响应。
为什么ExceptionHandler中间件无法处理从EFCore抛出的“深度下降”错误,并使我的应用程序崩溃?我想念什么吗?
可悲的AuthorizeInteractionResponseGenerator是,非常缺少有关IdentityServer4中自定义实现的文档。
我正在尝试实现自己的方法,AuthorizeInteractionResponseGenerator因为我需要进一步的用户交互步骤(在身份验证之后)。我的情况是,一个身份(电子邮件)可以与多个租户关联。因此,登录后,我需要向用户显示相关租户的列表,以便他们可以选择一个。
我已经评估了源代码,并提出了以下定制AuthorizeInteractionResponseGenerator:
public class AccountChooserResponseGenerator : AuthorizeInteractionResponseGenerator
{
public AccountChooserResponseGenerator(ISystemClock clock,
ILogger<AuthorizeInteractionResponseGenerator> logger,
IConsentService consent, IProfileService profile)
: base(clock, logger, consent, profile)
{
}
public override async Task<InteractionResponse> ProcessInteractionAsync(ValidatedAuthorizeRequest request, ConsentResponse consent = null)
{
var response = await base.ProcessInteractionAsync(request, consent);
if (response.IsConsent || response.IsLogin || response.IsError)
return response;
return new InteractionResponse
{
RedirectUrl = "/Organization"
};
}
}
Run Code Online (Sandbox Code Playgroud)
它继承自IdentityServer4内置的基本AuthorizeInteractionResponseGenerator,因此可以显示标准的“登录”和“同意”页面。发生这种情况,然后将用户正确重定向到该/OrganizationURL以选择组织(承租人)。
但是那又怎样呢?由于缺乏文档和示例,我真的很难找出以下两个问题:
1)现在,如何在选择租户后向我的自定义AccountChooserResponseGenerator指示我的交互已完成,并且现在可以将用户重定向回客户端?
编辑:
对1的答案:为了表明交互已完成,您必须返回一个空的新InteractionResponse()。就我而言,检查TenantId声明是否存在就足够了,如下所示:
if (!request.Subject.HasClaim(c=> c.Type == "TenantId" && c.Value …Run Code Online (Sandbox Code Playgroud) 我有一个带有以下startup.cs的ASP.Net Core 3.1应用程序(我已经根据网络搜索尝试了以下配置的各种组合):
public void ConfigureServices(IServiceCollection services)
{
...
services.Configure<RequestLocalizationOptions>(options =>
{
options.RequestCultureProviders = new[] { new CookieRequestCultureProvider() };
});
Run Code Online (Sandbox Code Playgroud)
和
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
var options = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
app.UseRequestLocalization(options.Value);
Run Code Online (Sandbox Code Playgroud)
在我的应用程序的登录方法中,我将文化 Cookie 设置如下:
HttpContext.Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture([logged-in-user].CultureCode)));
Run Code Online (Sandbox Code Playgroud)
在后续请求中,我可以在浏览器开发工具的“网络”选项卡中看到 cookie:

然而,在服务器上,任何给定的请求仍然保留我的开发环境的默认服务器区域性(即en-ZA)。(我通过检查System.Threading.Thread.CurrentThread.CurrentCulture.Name服务器操作方法中的任何断点来看到这一点)
我在客户端和服务器之间遇到了日期转换问题(例如,具有en-US文化的客户端,如上面的屏幕截图所示)将 2009 年 3 月 5 日(3 月 5 日)的日期发送到服务器,并且服务器正在解释它如5月3日。
为什么我的服务器不支持 CultureCookie?我缺少什么?
任何想法我会遵循什么方法让数据绑定列表框的项目"飞"到他们在列表框中的位置,类似于你在那些Windows Card游戏中处理一副牌时的效果?(我正在使用WPF)
每个包含测试的类是否都在它自己的线程中运行?或者每个单独的测试都在它自己的线程中运行?如果每个包含测试的类都有自己的线程,它们是否同时运行?即,来自A类的测试是否会与B类测试同时进行?或者是A类的测试运行(每个都在自己的线程上),然后是B类的测试(每个都在自己的线程上)?
在我的 nlog 配置中,我设置了
<targets async="true">
Run Code Online (Sandbox Code Playgroud)
了解所有日志记录现在都与我的应用程序工作流程异步发生。(我注意到性能有所提高,特别是在电子邮件目标上)。但这让我开始思考日志顺序。据我所知,对于异步,我们无法保证操作系统执行异步工作的顺序。因此,如果在我的 Web 应用程序中,多个请求进入同一方法,每个请求都将其发生记录到 NLog,这是否真的意味着事件在我的日志目标中出现的顺序不一定是日志中出现的顺序方法被各种请求调用?
如果是这样,这是否只是人们必须忍受的异步的结果?或者我可以做些什么来保持我的日志反映正确的顺序?
所以我有几个客户端使用我的 Angular 2 应用程序打开了浏览器窗口。然后我执行 ng build --prod,并将新构建发布到服务器。
如何强制客户端刷新所有缓存的脚本?
我当地的时区是UTC + 2.
我正在构建一个具有RadCalendar控件的NativeScript应用程序,用户可以在其中选择日期.在我的场景中,用户选择2018年1月29日,30日和31日.
甲console.dir()所选日期的输出显示如下:
=== dump(): dumping members ===
JS: [
JS: "2018-01-28T22:00:00.000Z",
JS: "2018-01-29T22:00:00.000Z",
JS: "2018-01-30T22:00:00.000Z"
JS: ]
JS: === dump(): dumping function and properties names ===
Run Code Online (Sandbox Code Playgroud)
显然,RadCalendar正在将值转换为UTC,这很酷.然后我将这些日期保存到我的Firestore数据库,在那里它们存储在我当地时间,并保留时区信息,如我的FireStore控制台的屏幕截图所示:

到现在为止还挺好.现在,当我将FireStore数据库中的那些记录读回我的应用程序(并进入RadCalendar控件的.selectedDates属性)时,问题就出现了.
回读后,console.log()检索到的文档快照中的一个显示如下:
{
"theDate":"Jan 31, 2018 12:00:00 AM",
"available":false,
"memberUid":"N76BviTCX8fLdErAjMHYqx2GEU63",
"organizationUid":"zv5A7UC8B7bKzePGPyaJ"
}
Run Code Online (Sandbox Code Playgroud)
请注意,时区信息已消失.我想在此时执行代码仍然是"本地时区感知",并且日期(对于我的本地时区)不正确.但是在更改'available'属性并将记录保存回FireStore时会出现问题.
请注意,它不再是FireStore中的日期,而是一个字符串.
针对NativeScript的Chrome DevTools调试器实际上显示,在将数据检索回应用程序时,检索到的日期属性已经是字符串而不再是日期.可能值得一提的是,我正在使用这个NativeScript-Firebase插件与Firestore进行交互......可能是根插件库中存在根问题吗?
如何确保从FireStore数据库中返回的值在我的代码中保留为日期?
javascript date timezone-offset nativescript google-cloud-firestore
根据此处定义的 Moq 快速入门的最后一部分,我尝试配置以下模拟,以便将表单值传递给测试中的控制器方法:
var formCollection = new FormCollection(
new System.Collections.Generic.Dictionary<string, Microsoft.Extensions.Primitives.StringValues>()
{
{"mAction", "someAction" },
{"mRefId", "0" }
});
var controllerContext = Mock.Of<ControllerContext>(ctx =>
ctx.HttpContext.Request.Form == formCollection);
controller.ControllerContext = controllerContext;
Run Code Online (Sandbox Code Playgroud)
但是,当运行测试时,它失败Mock.Of<>并出现以下错误:
System.NotSupportedException:不支持的表达式:mock => mock.HttpContext
不可重写的成员(此处:ActionContext.get_HttpContext)不得在设置/验证表达式中使用。
我缺少什么?我是否按照快速入门文档中定义的示例执行相同的操作?
我XPath应该使用什么查询来访问GetLogisticsOfferDateResult节点?我附上了我正在使用的vbscript.我怀疑问题与文档中的多个名称空间有关.但是如何在XPath中引用第二个命名空间?
Dim responseXML
responseXML = '"<s:Envelope xmlns:s=""http://schemas.xmlsoap.org/soap/envelope/""><s:Body><GetLogisticsOfferDateResponse xmlns=""http://schneider-electric.com/OrderEntryService""><GetLogisticsOfferDateResult>2010-07-20</GetLogisticsOfferDateResult></GetLogisticsOfferDateResponse></s:Body></s:Envelope>"'
Dim responseDoc
Set responseDoc = WScript.CreateObject("MSXML2.DOMDocument.6.0")
responseDoc.loadXML(responseXML)
responseDoc.setProperty "SelectionNamespaces", "xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'"
Dim requestedNode
'This node is not found
'Set requestedNode = responseDoc.selectSingleNode("//s:Envelope//s:Body//GetLogisticsOfferDateResponse//GetLogisticsOfferDateResult")
'This node is found
Set requestedNode = responseDoc.selectSingleNode("//s:Envelope//s:Body")
'This node is found
'Set requestedNode = responseDoc.selectSingleNode("//s:Envelope")
If requestedNode Is Nothing Then
WScript.Echo "Node not found"
Else
WScript.Echo requestedNode.text
End If
Set responseDoc = Nothing
Set LODateNode = Nothing
Run Code Online (Sandbox Code Playgroud) 我有一个包含CrystalReportViewer的普通asp.Net页面.我在Page_Load方法中使用以下代码来显示报告:
ReportDocument report = new ReportDocument();
TableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
ConnectionInfo crConnectionInfo = new ConnectionInfo();
Tables CrTables;
report.Load(Server.MapPath("Reports\\" + Request.Params[0]));
crConnectionInfo.ServerName = ConfigurationManager.AppSettings["ReportSQLServer"];
crConnectionInfo.DatabaseName = ConfigurationManager.AppSettings["ReportSQLDatabase"];
crConnectionInfo.UserID = ConfigurationManager.AppSettings["ReportSQLUsername"];
crConnectionInfo.Password = ConfigurationManager.AppSettings["ReportSQLPassword"];
CrTables = report.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
{
crtableLogoninfo = CrTable.LogOnInfo;
crtableLogoninfo.ConnectionInfo = crConnectionInfo;
CrTable.ApplyLogOnInfo(crtableLogoninfo);
}
Session["Report"] = report;
rptViewer.ReportSource = report;
rptViewer.RefreshReport();
Run Code Online (Sandbox Code Playgroud)
但是,无论我加载什么报告,它显示如下:

当我在WinForms应用程序中使用完全相同的逻辑来填充CrystalReportsViewer时,报表将按预期显示.
请告知我在asp.net网络表单中缺少的内容,以便正确显示报告.
c# ×2
angular ×1
animation ×1
asp.net ×1
asp.net-core ×1
date ×1
javascript ×1
moq ×1
mstest ×1
nativescript ×1
nlog ×1
t-sql ×1
unit-testing ×1
vbscript ×1
wpf ×1
xpath ×1