[HttpGet]
[HttpPost]
public HttpResponseMessage GetXml(string value)
{
var xml = $"<result><value>{value}</value></result>";
return new HttpResponseMessage
{
Content = new StringContent(xml, Encoding.UTF8, "application/xml")
};
}
Run Code Online (Sandbox Code Playgroud)
我使用 Swagger 调用了该操作并传递了此参数“文本值”
预期结果应该是这样的 XML 文件:文本值
实际结果:没有传递值的奇怪 json 结果!https://www.screencast.com/t/uzcEed7ojLe
我尝试了以下解决方案,但没有奏效:
services.AddMvc().AddXmlDataContractSerializerFormatters();
services.AddMvc().AddXmlSerializerFormatters();
Run Code Online (Sandbox Code Playgroud) 我有一个客户端程序(.Net 4.8 上的 WPF 应用程序)和一个 Web API(.Net Core 3.1)。我正在尝试让两者通过 SignalR Core 进行通信。当两者都在我的电脑上本地运行时(即在本地主机上),它可以完美地工作。但是,一旦我将 API 发布到 Azure 应用服务(并将 WPF 应用程序指向新 URL),它就不起作用了。SignalR 建立连接,但当 API 向 WPF 应用程序发送数据时,应用程序永远不会收到它。
不知道和CORS有没有关系。Azure 应用服务上的 CORS 已禁用。在我的 Web API 上,我使用以下 Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddCors(options =>
{
options.AddPolicy(MyAllowSpecificOrigins,
builder => builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
);
});
string connectionString = Configuration.GetConnectionString("eBallDatabase");
services.AddDbContext<EBallContext>(options =>
options.UseSqlServer(connectionString));
var config = new AutoMapper.MapperConfiguration(cfg =>
{
cfg.AddProfile(new AutoMapperProfileConfiguration());
});
var mapper = config.CreateMapper();
services.AddSingleton(mapper);
services.AddSignalR(options =>
{
options.EnableDetailedErrors = true;
});
services.AddApplicationInsightsTelemetry(); …Run Code Online (Sandbox Code Playgroud) 我已设法使默认模板正常工作(我的 blazor 独立 SPA 应该从不同的 ADApp - webAPI 获取多个范围的令牌;即使我定义了 extraScopes 或 defaultaccesstokenscopes,我也设法当时仅获取一个范围的令牌)。
builder.Services.AddMsalAuthentication(options =>
{
var config = options.ProviderOptions;
config.Authentication.Authority = "https://login.microsoftonline.com/tenantID";
config.Authentication.ClientId = "clientID";
options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
options.ProviderOptions.DefaultAccessTokenScopes.Add("https://graph.microsoft.com/user.read");
options.ProviderOptions.DefaultAccessTokenScopes.Add("https://tenant.crm.dynamics.com/user_impersonation");
options.ProviderOptions.DefaultAccessTokenScopes.Add("clientID/scope1");
// tried this too
// config.AdditionalScopesToConsent.Add("https://tenant.crm.dynamics.com/user_impersonation");
});
Run Code Online (Sandbox Code Playgroud)
现在有一个问题是如何获取其他令牌,因为如果提到多个范围,它只会获取“clientID”范围的令牌......?并在 HttpClient 请求中使用 wasm 页面中的那些令牌?
在 Angular 中(使用 MSAL),这一切都是自动完成的,您定义所需的范围,它就会获取所有令牌。然后它拦截所有请求,并按请求的域添加授权标头和相应的令牌。
这里是否有类似的机制,或者应该通过为每个请求添加相应的令牌并将 HttpRequestMessage 与 HttpClient.SendAsync() 一起使用来手动完成?
显然,对于业务应用程序来说,如果不接触某种受保护的 API(通常是同一 AAD 中的应用程序),就没有多大用处。例如,假设它可以是对 Dynamics CRM 的 webapi 的简单查询。
azure-active-directory .net-core webassembly blazor-client-side webapi
我看到这篇文章,我知道它有点旧,但它似乎应该可以工作,但是我正在尝试使用 Chrome 80,我认为对 createScriptProcessor 的支持已经结束,因为我无法让它按原样工作。我没有从输入流中得到任何信息。根据我的阅读,createScriptProcessor 应该替换为 AudioWorklet,但它看起来不像解决方案中的一个下降。我是一名初学者 JS 程序员,想知道是否有人对此进行了更改以使用 AudioWorklet 函数而不是 createScriptProcessor ?谢谢,
考虑以下两段代码。两者都将数据返回到 Web API Get 调用。两者都返回一个项目列表。两者都有效。第一个取自 Visual Studio 入门 Blazor Wasm 应用程序。第二个来自在线教程。tblTitles 是远程数据库中的一个表,通过 _dataContext 访问。
应该使用其中哪一个,为什么?或者也许一个更适合特定情况?
[HttpGet]
//First method:
public IEnumerable<TitlesTable> Get()
{
var titles = _dataContext.tblTitles.ToList();
return titles;
}
//Second method:
public async Task<IActionResult> Get()
{
var titles = await _dataContext.tblTitles.ToListAsync();
return Ok(titles);
}
Run Code Online (Sandbox Code Playgroud) 我已经根据最新的 Microsoft 模板编写了 Blazor WASM 应用程序。在开发模式下,一切都很好,但将其发布到 Azure 应用服务后,在调用 API 时,我随机收到 401 未经授权,查看返回的标头
WWW-Authenticate: Bearer error="invalid_token", error_description="The issuer 'https://*domain*.azurewebsites.net' is invalid"
Run Code Online (Sandbox Code Playgroud)
这是当客户端使用 https://域.azurewebsites.net 客户端时。所以它与Web API相匹配。
我还有一个附加到应用程序服务的自定义域,这意味着还有 https://www. 域名.co.uk 和 https://域名.co.uk 均采用 SSL。
我已检查 JWT 令牌,它包含我正在调用的网站版本的正确 URL。
有时一切正常,但 60% 的情况下允许用户登录,然后 API 调用失败。我似乎无法跟踪 1 个域名或模式(例如过期登录)。如果您注销然后重新登录,并不能解决问题。
配置看起来像这样
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
app.UseWebAssemblyDebugging();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseHttpsRedirection();
app.UseBlazorFrameworkFiles();
app.UseStaticFiles();
app.UseRouting();
app.UseIdentityServer();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
endpoints.MapFallbackToFile("index.html");
}); …Run Code Online (Sandbox Code Playgroud) MDN 上有一个带有 Webshare API 的示例:https : //mdn.github.io/dom-examples/web-share/
在我的 iOS 设备(iPhone 7 / iOS 14.0 / Safari)上,它只能正常工作一次。第二次抛出权限错误:
错误:NotAllowedError:当前上下文中用户代理或平台不允许该请求,可能是因为用户拒绝了权限。
以下是重现的所有步骤:
你有什么建议如何解决这个问题吗?这是一个已知的错误吗?
下面的代码可以在我的 Xubuntu 机器上运行,但现在我在 Kubuntu 上,它不再工作了 - 它不会打开端口。
Arduino IDE 工作正常(可以向开发板写入代码),我可以在 Chrome 中选择设备 (Arduino Uno),但当我尝试打开端口时,代码将停止:Uncaught (in promise) DOMException: Failed to open serial port或required member baudRate is undefined将出现。
const filters = [
// Filter on devices with the Arduino Uno USB Vendor/Product IDs.
{ usbVendorId: 0x2341, usbProductId: 0x0043 },
{ usbVendorId: 0x2341, usbProductId: 0x0001 },
];
async function getPortAndStartReading() {
if (!portFound) {
const port = await navigator.serial.requestPort({ filters });
await port.open({ baudRate: 9600 }) //problem here
reader …Run Code Online (Sandbox Code Playgroud) 以下链接引用了 MDN 页面,其中列出了许多 Web API 和接口:
https://developer.mozilla.org/en-US/docs/Web/API
但是,没有解释 Web API 和接口之间的主要区别是什么。我也没有成功地在谷歌上搜索到任何关于这个意义上的接口的信息。
作为一名经验不足的开发人员,我想了解区分 Web API 和接口的理论特征(要点)。
有人可以向我解释一下这一点或参考我在哪里可以阅读更多相关信息吗?
例如,在我引用的链接中,CSSOM 模型被视为一组 API 并列在 WEB API 类别下,同时 CSSStyleDeclaration 被视为接口并列在接口类别下。我对这两个类别(Web API 和接口)之间的区别特别感兴趣?
我正在使用 dotnet core 开发 webApi,该核心从 IFormFile 获取 excel 文件并读取其内容。我正在关注文章 https://levelup.gitconnected.com/reading-an-excel-file-using-an-asp-net- core-mvc-application-2693545577db正在做同样的事情,只不过这里的文件存在于服务器上,而我的文件将由用户提供。
这是代码:
public IActionResult Test(IFormFile file)
{
List<UserModel> users = new List<UserModel>();
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
using (var stream = System.IO.File.Open(file.FileName, FileMode.Open, FileAccess.Read))
{
using (var reader = ExcelReaderFactory.CreateReader(stream))
{
while (reader.Read()) //Each row of the file
{
users.Add(new UserModel
{
Name = reader.GetValue(0).ToString(),
Email = reader.GetValue(1).ToString(),
Phone = reader.GetValue(2).ToString()
});
}
}
}
return Ok(users);
}
}
Run Code Online (Sandbox Code Playgroud)
当 system.IO 尝试打开文件时,它无法找到路径,因为路径不存在。如何获取文件路径(根据用户选择的文件而有所不同)?还有其他方法可以实现吗?
PS:我不想先将文件上传到服务器上,然后再读取。
webapi ×10
javascript ×4
.net-core ×2
blazor ×2
c# ×2
asp.net-core ×1
file-read ×1
file-upload ×1
interface ×1
jwt ×1
navigator ×1
safari ×1
serialapi ×1
signalr ×1
web-share ×1
webassembly ×1
webusb ×1
wpf ×1
xml ×1