我正在尝试解码由我的 asp.net core api 生成的 Jwt 这是我用来解码 jwt 的代码
var handler = new JwtSecurityTokenHandler();
var tokenS = handler.ReadJwtToken(jwt);
return tokenS;
Run Code Online (Sandbox Code Playgroud)
这在服务器中有效。没问题。但是,如果我尝试在 Blazor client_side 中使用相同的代码,则会收到此错误。
blazor.web assembly.js:1 WASM: System.ArgumentException: IDX12723: 无法解码有效负载“[PII 已隐藏。有关更多详细信息,请参阅https://aka.ms/IdentityModel/PII。] ' 作为 Base64Url 编码字符串。jwtEncodedString: '[PII 已隐藏。有关更多详细信息,请参阅https://aka.ms/IdentityModel/PII。] '。---> Newtonsoft.Json.JsonSerializationException:无法找到用于 System.IdentityModel.Tokens.Jwt.JwtPayload 类型的默认构造函数。路径“unique_name”,第 1 行,位置 15。
这是我正在使用并尝试解码的 jwt 令牌
eyJhbGciOiJIUZI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IjA4ZDdjYzE5LWY2OTgtYTRLOS05ODcxLWE2ZWM1ODg1OTRhZCIsInJvbGUIOiJBZG1pbiIsImdpdmVuX25hbWUiOi JvY2xpY2swMjEiLCJuYmYiOjE1ODQ4MjM0MTYsImV4cCI6MTU4NDgyMzcxNiwiaWF0IjoxNTg0ODIzNDE2fQ.nD3YzBu1qvNelDz2WHcMSGckkTtTHX98baNTBXeu12M
我创建了一个 Blazor WebAssembly 项目,并希望提供一个具有一个公共可用函数的 WebAPI。
[Route("api/[controller]")]
[ApiController]
[Authorize]
public class SystemEvalApiController : ControllerBase
{
public SystemEvalApiController(AppDbContext context, IMapper mapper)
{...}
[Route("LatestEvals")]
[AllowAnonymous]
public ActionResult LatestEvals()
Run Code Online (Sandbox Code Playgroud)
这是我的 Api 控制器,我应该能够通过以下方式调用它:
SystemEvalPublicViewModel = await Http
.GetFromJsonAsync<SystemEvalPublicViewModel>(
HttpService.BuildUrl("api/SystemEvalApi/LatestEvals"));
Run Code Online (Sandbox Code Playgroud)
当我没有登录任何帐户时。但我得到了这个错误:
info: System.Net.Http.HttpClient.JPB.BorannRemapping.ServerAPI.LogicalHandler[100]
Start processing HTTP request GET https://localhost:44330/api/SystemEvalApi/LatestEvals
blazor.webassembly.js:1 info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]
Authorization failed.
Run Code Online (Sandbox Code Playgroud)
看起来“DefaultAuthorizationService”无法识别匿名属性,但我找不到它直接失败的点。
如何声明无需登录即可从 HttpClient 访问 WebAPI 函数。Microsoft.AspNetCore.Components.WebAssembly.Server 3.2.0.-rc1.20223.4
编辑:这是 ClientServices 的声明:
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");
builder.Services.AddHttpClient("JPB.BorannRemapping.ServerAPI", client =>
{
client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress);
})
.AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();
// Supply HttpClient instances that include access …Run Code Online (Sandbox Code Playgroud) 我在另一个论坛上问过这个问题,但没有得到有用的答案。
运行 VS2019 16.8.0,.Net SDK 从 3.1.302 到 5.0.100 - Blazor Server 项目
我有一个剃刀表单,编译器无法识别“EditForm”、“InputText”等。
这是代码:
page "/GetCustomerProfile"
@using QuoteBL.Data
@inject IJSRuntime JSRuntime
<h1>Please fill out form</h1>
<EditForm Model="srcfields" OnValidSubmit="@InvokeGetQuote">
<p>
<label for="age">Age:</label>
<InputText id="age" @bind-Value="QuoteBLModel.age1" />
</p>
<p>
<label for="smoke">Do you smoke?</label>
<InputCheckbox id="smoke" @bind-Value="AllFieldsModel.smoker" />
</p>
<p>
<label>
Sex:
<InputSelect @bind-Value="QuoteBLModel.sex1">
<option value="Select Sex"></option>
<option value="Male">Male</option>
<option value="Female">Female</option>
</InputSelect>
</label>
</p>
</EditForm>
<div>
<span id="resultjson"></span>
</div>
@code {
private AllFieldsModel scrfields = new AllFieldsModel();
private async Task InvokeGetQuote()
{ …Run Code Online (Sandbox Code Playgroud) 我创建了一个 Blazor WebAssembly 应用程序,当单击注销链接时,/authentication/logout我会被重定向到/authentication/logout-failed?message=The%20logout%20was%20not%20initiated%20from%20within%20the%20page.以下消息:
尝试将您注销时发生错误:“”
我正在使用 IdentityServer4。
如何执行正确的注销并且我也从服务提供商(Facebook、Google 和/或 Microsoft)注销?
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddAuthentication()
.AddFacebook(facebookOptions =>
{
facebookOptions.ClientId = Configuration["Authentication:Facebook:ClientId"];
facebookOptions.ClientSecret = Configuration["Authentication:Facebook:ClientSecret"];
})
.AddGoogle(googleOptions =>
{
googleOptions.ClientId = Configuration["Authentication:Google:ClientId"];
googleOptions.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
})
.AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"];
microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
});
services.Configure<IdentityOptions>(options …Run Code Online (Sandbox Code Playgroud) 我试图理解@functions {}blazor web assembly 中的块的重要性。如果我在 VS 中创建一个新的 blazor 项目,它看起来像下面开箱即用的。我们有一个@code街区。但是在许多 blazor 文档中,我看到@functions{}..有什么区别?我什么时候应该使用哪个?我可以一起使用它们吗?我可以将它们嵌套在一起吗?当我看到{并}想到scope变量和对象时。scope跟它有关系吗?为什么我想在剃刀页面中确定我的变量范围?提前致谢。
Asp.net core 服务器端本地化有很好的文档记录并且对我有用。但是,如何在 Blazor WebAssembly 客户端上本地化 DTO 模型上的 DataAnnotations?
在服务器端,我添加了下面的代码,并且 DataAnnotations 已本地化。一切都按预期进行。
...
services
.AddRazorPages() .AddViewLocalization(Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization(
options =>
{
options.DataAnnotationLocalizerProvider = (type, factory) =>
{
return factory.Create(typeof(CommonStrings));
};
});
...
Run Code Online (Sandbox Code Playgroud)
但是我如何在 Blazor 客户端(WebAssembly)上做同样的事情呢?例如,我有一个位于客户端的模型:
public class ApplicationUserDTO
{
public string Id { get; set; }
[Required(ErrorMessage ="Field {0} is required")]
[Display(Name ="First name")]
public string FirstName { get; set; }
[Required]
[Display(Name = "Last name")]
public string LastName { get; set; }
[Required]
[Display(Name = "Email")]
public string Email { …Run Code Online (Sandbox Code Playgroud) Uncaught (in promise) TypeError: second argument must be an object当我运行以下代码时出现错误:
async function loadWasm(url) {
const fetchPromise = fetch(url)
const { module, instance } = await WebAssembly.instantiateStreaming(fetchPromise)
// [...]
}
loadWasm('http://localhost:3000/path/to/file.wasm')
Run Code Online (Sandbox Code Playgroud)
查看文档,它说WebAssembly.instantiateStreaming( importObject) 的第二个参数是可选的,所以我不明白为什么浏览器仍然强制它?
我已经在 Firefox 78.7.0esr(64 位)和 Chrome 88.0.4324.96(官方版本)(64 位)中对此进行了测试。如果它很重要,代码会在 ruby on Rails 6.1 应用程序中使用 webpack 5 进行转译。
更新:
我在 mdn 的 github 存储库上提出了一个问题,认为文档可能需要更新。到目前为止,文档似乎很好,所以这可能是一个实现问题。有待证实。
更新:
这既不是实施问题,也不是文档错误。我在下面的答案中发表了关于这个问题的结论。
我在 Visual Studio 中有一个 Blazor WebAssembly 项目。我现在刚刚向解决方案添加了一个 Azure Function 项目。我打算将其发布到新的 Azure Static Web App。
我一直遵循此 Microsoft 文档中的说明。
使用 Azure 静态 Web 应用发布 Blazor WebAssembly 应用和 .NET API
根据文档,我只需要使用 launchSettings.json 在本地设置 CORS,然后在 Visual Studio 中同时运行 Api 和客户端项目。然后我应该能够像这样调用 Api。
string test = await Http.GetStringAsync("api/Test");
Run Code Online (Sandbox Code Playgroud)
测试后,字符串变量“test”仅返回以下内容。
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>Client</title> <base href="/" /> <link href="css/bootstrap/bootstrap.min.css" rel="stylesheet" /> <link href="css/app.css" rel="stylesheet" /> <link href="Client.styles.css" rel="stylesheet" /> <link href="manifest.json" rel="manifest" /> <link rel="apple-touch-icon" sizes="512x512" …Run Code Online (Sandbox Code Playgroud) 我想要运行函数来阻止表的每一行。我想在加载 HTML 代码后执行此操作,我尝试这样做
<body>
<script
type="text/javascript"
src="https://cdn.jsdelivr.net/pyodide/dev/full/pyodide.js"
></script>
<script type="text/javascript">
async function main(kw) {
let pyodide = await loadPyodide({
indexURL: "https://cdn.jsdelivr.net/pyodide/dev/full/",
});
pyodide.globals.set("mikw", kw);
await pyodide.loadPackage("micropip");
await pyodide.runPythonAsync(`
import micropip
import js
await micropip.install('snowballstemmer')
import snowballstemmer
stemmer = snowballstemmer.stemmer('english')
div = js.document.createElement("div")
div.innerHTML = stemmer.stemWords('Hello this my default text '.split())
js.document.body.prepend(div)
varP = js.document.getElementById('origen').textContent
print(varP)
salida = stemmer.stemWords(varP.split())
print(salida)
divSalida = js.document.createElement("div")
div.innerHTML =salida
salida = stemmer.stemWords(mikw.split())
print(salida)
`);
}
main('This are the second text, I put this text on …Run Code Online (Sandbox Code Playgroud) 我正在尝试运行 WASM Go 过滤器以使用 net/http 模块进行外部 HTTP 调用。Envoy 无法加载 WASM 代码。为什么导入失败?
Envoy/Istio 版本: istio/proxyv2:1.11.4
SDK版本: v0.16.1-0.20220127085108-af57b89bc067
TinyGo版本: tinygo版本0.22.0 darwin/amd64(使用go版本go1.17.6和LLVM版本13.0.0)
2022-01-31T20:34:18.513749Z error envoy wasm Failed to load Wasm module due to a missing import: env.time.resetTimer
2022-01-31T20:34:18.513794Z error envoy wasm Failed to load Wasm module due to a missing import: env.time.stopTimer
2022-01-31T20:34:18.513807Z error envoy wasm Failed to load Wasm module due to a missing import: env.time.startTimer
2022-01-31T20:34:18.513817Z error envoy wasm Failed to load Wasm module due to a missing import: env.sync/atomic.AddInt32 …Run Code Online (Sandbox Code Playgroud) webassembly ×10
blazor ×6
.net ×2
c# ×2
asp.net-core ×1
azure ×1
client ×1
envoyproxy ×1
go ×1
istio ×1
javascript ×1
jwt ×1
localization ×1
logout ×1
parameters ×1
pyodide ×1
tinygo ×1