我已经下载了Stripe.net NuGet 包来处理付款。
我在文档中看到过很多地方讨论API v2,但如果我使用 Visual Studio 使用元数据显示源代码,我会看到对"/v1/billing/meter_events"等路径的引用。显然,我目前使用的是版本 1。
如何使用这个库来访问版本 2 API?
我已经下载了Stripe.net NuGet 包来处理付款。
我在文档中看到过很多地方讨论API v2,但如果我使用 Visual Studio 使用元数据显示源代码,我会看到对"/v1/billing/meter_events"等路径的引用。显然,我目前使用的是版本 1。
如何使用这个库来访问版本 2 API?
我正在我的网站上实施 Stripe 付款。
他们说在我的页面上创建以下方法。
[HttpPost("create-checkout-session")]
public ActionResult CreateCheckoutSession()
{
// ...
}
但是,这是 MVC 语法,并且我正在使用 Razor Pages。
public IActionResult OnPost()
{
// ...
}
我知道如何使用命名处理程序,但我不知道如何给我的方法命名create-checkout-session
。
我的基类中有一个具有以下签名的方法。
public virtual async Task<TagBuilder> RenderAsync(int columnWidth)
{
// ...
}
这工作得很好,但是我有很多派生类重写了这个方法。其中一些覆盖不使用await
.
这给了我一个警告。
警告 CS1998 此异步方法缺少“await”运算符,并将同步运行。考虑使用“await”运算符等待非阻塞 API 调用,或使用“await Task.Run(...)”在后台线程上执行 CPU 密集型工作。
解决此警告的最佳方法是什么?首先,我不希望我的代码中到处都是警告。但我需要async
在基类中。我想以一种经过批准的方式解决这个问题,不会带来任何不必要的开销。
我有以下引导模式。
<div id="product-modal" class="modal" tabindex="-1" role="dialog">
<form>
<input id="product-index" type="hidden" />
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 id="edit-title" class="modal-title"></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-12">
<div class="mb-3">
<label asp-for="ShipProduct.ProductId" class="control-label"></label>
<select asp-for="ShipProduct.ProductId" class="form-select" asp-items="Model.ProductOptions"></select>
<span asp-validation-for="ShipProduct.ProductId" class="text-danger"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="mb-3">
<label for="product-uom" class="control-label">Unit of Measurement</label>
<input id="product-uom" type="text" class="form-control" readonly />
</div>
</div>
<div class="col-md-6">
<div class="mb-3">
<label asp-for="ShipProduct.InboundQuantity" class="control-label">Inbound Quantity</label>
<input asp-for="ShipProduct.InboundQuantity" class="form-control" />
<span asp-validation-for="ShipProduct.InboundQuantity" class="text-danger"></span>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button id="product-save" class="btn btn-primary">Save</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
</div>
</div>
</div>
</form>
</div>
我想使用 jQuery 不显眼的验证来验证表单数据。但是,我不想提交表格。
我有以下 JavaScript。它按预期工作。但是,代码运行后,表单将被提交。
$('#product-save').on('click', function () {
var $modal = $('#product-modal');
var $form = $modal.find('form');
$form.validate();
if ($form.valid()) {
// Process input data
}
}
有谁知道为什么要提交表单以及如何停止它?
我有以下查询,我期待一些结果。但我只得到一个结果。
var results = await DbContext.Trucks
.Where(t => t.Departure.HasValue)
.Select(t => new
{
t.Departure!.Value.Year,
t.Departure!.Value.Month,
Quantity = t.InboundQuantity + t.ToTransfers.Sum(x => x.Quantity) - t.FromTransfers.Sum(x => x.Quantity)
})
.GroupBy(t => new { t.Year, t.Month })
.ToDictionaryAsync(g => new DateTime(g.Key.Year, g.Key.Month, 1), g => g.Sum(x => x.Quantity));
结果
results Count = 1
+ [0] {[{7/1/2021 12:00:00 AM}, 3842405714]}
如果我重写查询以将所有行加载到内存中然后进行分组,那么我就会得到预期数量的结果。
var test = DbContext.Trucks
.Where(t => t.Departure.HasValue)
.Select(t => new
{
t.Departure!.Value.Year,
t.Departure!.Value.Month,
Quantity = t.InboundQuantity + t.ToTransfers.Sum(x => x.Quantity) - t.FromTransfers.Sum(x => x.Quantity)
})
.ToList();
var test2 = test
.GroupBy(t => new { t.Year, t.Month })
.ToDictionary(g => new DateTime(g.Key.Year, g.Key.Month, 1), g => g.Sum(x => x.Quantity));
结果
test2 Count = 27
+ [0] {[{1/1/2022 12:00:00 AM}, 95309170]}
+ [1] {[{2/1/2022 12:00:00 AM}, 79737674]}
+ [2] {[{3/1/2022 12:00:00 AM}, 173875538]}
+ [3] {[{7/1/2021 12:00:00 AM}, 125219196]}
+ [4] {[{8/1/2021 12:00:00 AM}, 110993954]}
+ [5] {[{10/1/2021 12:00:00 AM}, 129282632]}
+ [6] {[{11/1/2021 12:00:00 AM}, 160927222]}
+ [7] {[{12/1/2021 12:00:00 AM}, 117813444]}
+ [8] {[{9/1/2021 12:00:00 AM}, 26260420]}
+ [9] {[{4/1/2022 12:00:00 AM}, 161695966]}
+ [10] {[{5/1/2022 12:00:00 AM}, 184781001]}
+ [11] {[{6/1/2022 12:00:00 AM}, 146985217]}
+ [12] {[{7/1/2022 12:00:00 AM}, 84260160]}
+ [13] {[{8/1/2022 12:00:00 AM}, 89769875]}
+ [14] {[{10/1/2022 12:00:00 AM}, 187958697]}
+ [15] {[{11/1/2022 12:00:00 AM}, 175034225]}
+ [16] {[{9/1/2022 12:00:00 AM}, 108421771]}
+ [17] {[{1/1/2023 12:00:00 AM}, 179720773]}
+ [18] {[{12/1/2022 12:00:00 AM}, 110000415]}
+ [19] {[{2/1/2023 12:00:00 AM}, 210461751]}
+ [20] {[{3/1/2023 12:00:00 AM}, 232239876]}
+ [21] {[{4/1/2023 12:00:00 AM}, 176482465]}
+ [22] {[{5/1/2023 12:00:00 AM}, 218732769]}
+ [23] {[{6/1/2023 12:00:00 AM}, 186324324]}
+ [24] {[{7/1/2023 12:00:00 AM}, 151700649]}
+ [25] {[{8/1/2023 12:00:00 AM}, 142653374]}
+ [26] {[{9/1/2023 12:00:00 AM}, 75763156]}
我可能在这里遗漏了一些愚蠢的东西,但我无法解释这一点。
为什么第一个查询没有按预期工作?
我有一个作为 Windows 服务运行的 C# 控制台应用程序。我怎样才能允许它访问文件系统?
我应该为其创建一个帐户吗?如果是这样,我认为我不需要用户帐户。(我注意到其他 Windows 服务在未显示在我的用户帐户下的帐户下运行。)如果这是正确的方法,我如何创建这些类型的帐户之一?
但每当我用谷歌搜索这个时,我似乎只是找到了创建常规用户帐户的页面。