所以我正在 ASP.NET Core 中创建这个小项目,我已经编写了一个 WEB API,但我正在努力使用 Blazor 中的前端来使用该 API。POST、GET HTTP 请求效果很好。我有一个剃刀页面,我在其中放入了一些数据(姓名、家庭姓名等),然后单击“发送”,将数据发布到 API。
关于该表格有一些验证:姓名 – 至少 5 个字符 FamilyName – 至少 5 个字符的地址 – 至少 10 个字符的电子邮件地址 – 必须是有效的电子邮件年龄 – 必须在 20 到 60 之间
而这一切都在这里通过 DataAnnotations 完成:
using System.ComponentModel.DataAnnotations;
namespace Blazor.Data
{
public class Applicant
{
public int Id { get; set; }
[MinLength(5, ErrorMessage ="Name must contain atleast 5 characters.")]
public string Name { get; set; }
[MinLength(5, ErrorMessage ="Family Name must contain atleast 5 characters.")]
public string FamilyName …Run Code Online (Sandbox Code Playgroud) 我有一个模型,
public class Order
{
public Guid Id { get; set; }
public IEnumerable<string> ItemIds { get; set; }
public string Currency { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和一个存储库,
public interface IOrderRepository
{
IEnumerable<Order> Get();
Order Get(Guid id);
void Add(Order order);
void Update(Guid id, Order order);
// other irrelevant code has been deleted for simplicity
}
public class MemoryOrderRepository : IOrderRepository
{
private readonly IList<Order> _orders = new List<Order>();
public IEnumerable<Order> Get() => _orders;
public Order Get(Guid id) => _orders.FirstOrDefault(o => …Run Code Online (Sandbox Code Playgroud) 我有一个 .net core 3.1 web api。我已经尝试了以下但它总是在它击中它时变成空
[HttpPost]
public IActionResult ReturnXmlDocument(HttpRequestMessage request)
{
var doc = new XmlDocument();
doc.Load(request.Content.ReadAsStreamAsync().Result);
return Ok(doc.DocumentElement.OuterXml.ToString());
}
Run Code Online (Sandbox Code Playgroud)
它甚至在调试过程中也没有命中它,它还在 fiddler 中显示 415 错误。
互联网和 StackOverflow 上已经有很多关于 SharedWorker 的讨论和教程,但没有一个真正实现了最基本的目标——直接在两个共享 worker 之间传递数据。
对我来说,SharedWorker 相对于专用 Web Worker 的优势在于前者允许通过不同的选项卡、iframe 和线程进行直接通信。我尝试了以下方法:
(shared.html:)
<!DOCTYPE html><html><head></head><body>
<button onclick="init('a')">Initiate A</button>
<button onclick="init('b')">Initiate B</button>
<script>
var a,b;
function init(v) {
if (v=='a'){
a = (new SharedWorker('./shared.js')).port;
a.start();
a.postMessage({type:'start', port:b})
} else {
b = (new SharedWorker('./shared.js')).port;
b.start();
b.postMessage({type:'start', port:a}); // <== error here
}
}
</script></body></html>
Run Code Online (Sandbox Code Playgroud)
(共享.js)
let peer = null;
onconnect = function (ev) {
let port = ev.ports[0];
port.onmessage = (e) => {
if (e.data.type=='start' && e.data.port){
peer=e.data.port;
} else …Run Code Online (Sandbox Code Playgroud) 我的控制器操作之一以 JSON 响应返回大量集合,当我向该控制器 WebAPI 发出请求时,不会返回响应。因此,我使用断点测试了此操作,并且集合正常填充。最后,我确信这是 WebApi 的问题,因为我已经通过多个客户端(WPF 和 Postman)测试了该控制器的操作,并且每个客户端都只是等待响应。我认为障碍是我的 WebAPI 的响应大小。我的 WebAPI 在 IIS Express 上运行
所以我有两个问题:
1)。ASP.NET Core 3.0 上 WebAPI 响应的最大长度是多少?
2)。如何增加 ASP.NET Core 3.0 上 WebAPI 响应的最大大小长度?
我试图在 MediaRecorder 处于“录制”状态时将 mediaTrack 添加到 mediaStream
添加新曲目的代码如下:
activeStream.addTrack(newAudioTrack)
Run Code Online (Sandbox Code Playgroud)
之后事件(onstop)被触发。我怎样才能避免这种情况?
我在 Startup.cs 中有 SetPreFlightMaxAge。但 chrome“检查”>“网络”选项卡不会在响应标头中显示它。
启动.cs
app.UseCors(o =>
{
o.WithOrigins(allowedDomains.ToArray())
.SetPreFlightMaxAge(TimeSpan.FromMinutes(10))
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
});
Run Code Online (Sandbox Code Playgroud)
响应标头(GET 方法):除了一些其他标头之外,它还发送这些标头。下面第三行有一个 max-age,但这不是 Startup.cs 中设置的 10 分钟值
access-control-allow-credentials: true
access-control-allow-origin: ...
set-cookie: ...
strict-transport-security: max-age=2592000
vary: Origin,Accept-Encoding
Run Code Online (Sandbox Code Playgroud)
响应标头(OPTIONS 方法):
access-control-allow-credentials: true
access-control-allow-headers: ...
access-control-allow-origin: ...
set-cookie: ...
Run Code Online (Sandbox Code Playgroud) 我正在将用 netcore2 编写的应用程序移植到 6,角度为 13。在 Visual Studio 中运行时,每个 Web api 控制器/方法总是收到 404 错误
[ApiController]
[Route("[controller]")]
public class GetOptionsController : Controller
{
private readonly GetOptionsService _getOptionsService;
public GetOptionsController(GetOptionsService getOptionsService)
{
_getOptionsService = getOptionsService;
}
[HttpGet]
public IActionResult GetOptions()
{
var options = _getOptionsService.GetOptions();
return Ok(options);
}
}
}
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { IOption } from '../interfaces/option';
@Injectable()
export class OptionsService {
constructor(private http: HttpClient) { …Run Code Online (Sandbox Code Playgroud) 我们的客户为我们提供了他们所有 API 端点的 swagger 链接。我们有一个使用 VS 2022 和 .Net 6 的 .Net Core 项目。现在我们想要为相同的 .Net Core 解决方案生成一个 OpenAPI 客户端项目,以便我们通过 OpenAPI 项目调用客户端的 API 端点。
我遵循的步骤是:
正如该文档中提到的,首先,我使用此命令安装了 Open API
npm install @openapitools/openapi-generator-cli -g
然后,当我执行 OpenAPI Generator CLI 使用此命令生成 SDK 时,我收到错误“Java”未被识别为内部或外部命令
openapi-generator generate -i swagger.json -g csharp-netcore -o Api.Client.Sdk --additional-properties packageName=Api.Client.Sdk
我正在尝试从我的最小 API 中获取结果,该 API 在我的 MVC Web 应用程序的端点中配置,我的 Get 操作配置如下:
endpoints.MapGet(
"HO-CFDZU4/api/Currency/Get",
[PermissionAuthorize(PermissionName.ReadCurrencyDictionary)]
async ([FromServicesAttribute] CurrencyService curency) =>
{
var result = await DataSourceLoader.LoadAsync(curency.Get(), new DataSourceLoadOptions());
return Results.Ok(result);
});
Run Code Online (Sandbox Code Playgroud)
结果我得到了对象的响应,其中属性名称更改为小写,并且它不适合我。我想在相同的情况下获得完全相同的名称,就像我返回表单操作一样。
为了在 MVC 中获得类似的效果,我使用了以下代码:
services
.AddMvc()
.AddFluentValidation(x => x.RegisterValidatorsFromAssembly(AppDomain.CurrentDomain.GetAssemblies().Where(x => x.FullName.Contains("ApplicationCore")).Single()))
.AddMvcLocalization()
.AddMvcOptions(options =>{})
.AddRazorRuntimeCompilation()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNamingPolicy = null;
options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles;
});
Run Code Online (Sandbox Code Playgroud)
在控制器中使用操作时,它为 Json 设置属性命名策略,但我不知道如何为minimalApi 设置相同的策略。
我尝试过的是设置[JsonPropertyName(name)]它运行良好,但我们有很多课程,我正在寻找更全局的解决方案。
我还尝试像这样全局配置 JsonOptions:
services.Configure<JsonOptions>(options =>
{
options.JsonSerializerOptions.PropertyNamingPolicy = null;
options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles;
});
Run Code Online (Sandbox Code Playgroud)
但它什么也不做
webapi ×10
c# ×7
asp.net-core ×6
.net-core ×2
javascript ×2
angular ×1
blazor ×1
button ×1
fiddler ×1
frontend ×1
httpresponse ×1
iis-express ×1
minimal-apis ×1
openapi ×1
postman ×1
web ×1
webrtc ×1
worker ×1
xml ×1