我想将Object转换为将在运行时分配的类型.
例如,假设我有一个函数将字符串值(从a TextBox or Dropdownlist)赋值给Object.Property.
如何将值转换为正确的类型?例如,它可以是整数,字符串或枚举.
Public void Foo(object obj,string propertyName,object value)
{
//Getting type of the property og object.
Type t= obj.GetType().GetProperty(propName).PropertyType;
//Now Setting the property to the value .
//But it raise an error,because sometimes type is int and value is "2"
//or type is enum (e.a: Gender.Male) and value is "Male"
//Suppose that always the cast is valid("2" can be converted to int 2)
obj.GetType().GetProperty(propName).SetValue(obj, value, null);
}
Run Code Online (Sandbox Code Playgroud) 我有一个带有 Blazor 组件的 Razor 类库,并且想要为该组件设置命名空间,但出现编译错误:
@namespace MY.UI.Blazor.Component;
Run Code Online (Sandbox Code Playgroud)
我收到以下编译错误:
错误 RZ1014:“命名空间”指令需要命名空间名称。
我正在尝试在 Blazor 服务器应用程序上添加 Google 身份验证,但无法在我的本地主机上运行。当我单击“登录”按钮时,它会将我带到 Google 帐户选择器,在那里我选择一个用于登录的帐户。选择一个帐户后,它返回到我的 localhost 登录页面,其中 OnGetCallbackAsync 显示 GoogleUser.IsAuthenticated 是错误的。
下面是 Startup.cs
namespace RecruitmentApp
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
//options.UseSqlite("DataSource=app.db"));
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = false)
.AddEntityFrameworkStores<ApplicationDbContext>(); …Run Code Online (Sandbox Code Playgroud) 我想找到.dll文件已经通过发货文件Blazor(网络组件)像Chrome浏览器,看看是否.DLL文件,可以通过反汇编程序读取(如反射镜)或没有。我在 Chrome 中找到了这些文件
开发者工具(F12) > 应用程序选项卡 > 缓存存储
但在磁盘上找不到它们。
更新:假设我想要访问其他人的 Blazor 网站的.dll文件。网站访问者的计算机上的以下文件在哪里?
和
我有Leaflet用于显示小区域地图的Web应用程序。问题在于该应用程序必须脱机工作(在LAN上),并且从中加载地图图块Openstreetmap。我下载了所需的磁贴,但找不到关于如何使用下载的文件(扩展名为.mbtiles的500MB文件)的良好文档。这是Leaflet建议的默认方法:
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
Run Code Online (Sandbox Code Playgroud)
如何设置dotnet core用于使用离线图块和给定参数并获取图块图像的服务器?(如下所示):
L.tileLayer('https://example.com/DotnetCore/WepApi/GetTiles?{s}/{z}/{x}/{y}').addTo(map);
Run Code Online (Sandbox Code Playgroud) 作为我的项目的一部分,我必须使用 RSA 加密一些文本,并且我从另一家公司获得了公钥。公钥如下所示:
var publicKey="MIGfMA0GCSq2GSIb3DQEBAQUAA4GNADCBiQKBgQCgFGVfrY4jQSoZQWWygZ83roKXWD4YeT2x2p41dGkPixe73rT2IW04glatgN2vgoZsoHuOPqah5and6kAmK2ujmCHu6D1auJhE2tXP+yLkpSiYMQucDKmCsWXlC5K7OSL77TXXcfvTvyZcjObEz6LIBRzs6+FqpFbUO9SJEfh6wIDAQAB"
Run Code Online (Sandbox Code Playgroud)
问题是我不知道它的格式是什么以及如何将其反序列化为RSAParameters. Internet 上的其他示例已使用 XML 序列化。密钥由 Java 创建。
然后我还想知道如何反序列化其相关的私钥,我现在无法访问它的任何示例。
更新 :
这是我的代码的一部分:
var pk = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiiTx4F35eWP10AFMAo8MLhCKq2ryKFG9PKKWeMLQuwMSdiQq347BkMYA+Q+YscScf7weUSTk9BHVNNfTchDwzjQrIoz6TZGggqD+ufin1Ccy0Sp6QeBMnIB89JsdzQGpVcsoTxk53grW0nYY8D+rlFvBwFicKe/tmVPVMYsEyFwIDAQAB";
...
public static RSACryptoServiceProvider ImportPublicKey(string pem)
{
//var newPem = "-----BEGIN PUBLIC KEY-----\n" + pem + "-----END PUBLIC KEY-----";
Org.BouncyCastle.OpenSsl.PemReader pr = new Org.BouncyCastle.OpenSsl.PemReader(new StringReader(Pem));
Org.BouncyCastle.Crypto.AsymmetricKeyParameter publicKey = (Org.BouncyCastle.Crypto.AsymmetricKeyParameter)pr.ReadObject();
RSAParameters rsaParams = Org.BouncyCastle.Security.DotNetUtilities.ToRSAParameters((Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters)publicKey);
RSACryptoServiceProvider csp = new RSACryptoServiceProvider();// cspParams);
csp.ImportParameters(rsaParams);
return csp;
}
Run Code Online (Sandbox Code Playgroud) 我有一个简单的 Blazor 组件,它迭代通用列表:
@typeparam TItem;
@foreach (var item in List)
{
@ElementTemplate(item); // What code should be here to pass i to the ElementTemplate????
i++;
}
@code {
int i = 0;
[Parameter] public List<TItem> List { get; set; }
[Parameter] public RenderFragment<TItem> ElementTemplate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有另一个简单的组件,它将获取一个项目和一个索引来呈现数据(员工):
<div> @Index . @Person.Name </div>
@code{
[Parameter] public Person { get; set; }
[Parameter] public int Index { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的主页上有以下内容:
<GenericList List="employees">
<ElementTemplate>
<Employee Person="context" Index="?"></Employee>
</ElementTemplate> …Run Code Online (Sandbox Code Playgroud) 这是Java代码:
new BigInteger("abc".getBytes()).toString();
Run Code Online (Sandbox Code Playgroud)
结果是6382179。
我想在 C# 中得到相同的结果,但是当我使用以下代码时:
(new System.Numerics.BigInteger(System.Text.Encoding.ASCII.GetBytes("abc"))).ToString();
Run Code Online (Sandbox Code Playgroud)
我得到6513249。
如何在 C# 中以与 Java 相同的方式转换字符串?
我们知道它Blazor用于SignalR客户端和服务器之间的通信,并且还有消息大小限制SignalR(当前为32k)。如何从服务器向客户端发送超过 32k 的数据,反之亦然?
使用 Blazor,InputSelect您可以迭代组件中的列表项ChildContent,但
我想创建一个自定义 Blazor(WebAssembly 版本 5)InputSelect,它可以接受要在选择中呈现的任何对象的列表,代码可能如下所示:
<CustomInputSelect @bind-Value="@myEntity.CountryId" For="@(()=> myEntity.CountryId)" List="countries"
ValueField="@(a => a.Id)" DisplayField="@(a => a.CountryName)" ></CustomInputSelect>
Run Code Online (Sandbox Code Playgroud)
甚至这个:
<CustomInputSelect @bind-Value="@myEntity.Country" For="@(()=> myEntity.Country)" List="countries"
ValueField="Id" DisplayField="CountryName" ></CustomInputSelect>
Run Code Online (Sandbox Code Playgroud)
(注意:我使用该For属性来帮助编译器推断类型CountryId并进行验证。这是@typeparam组件的。)
我尝试了很多方法,但没有一个有效,所以我在下面解释它们:
我尝试使用dynamic列表的类型,但 Blazor 似乎不支持动态类型,因为 razor 生成的代码中存在错误。
@typeparam我尝试对组件使用多个,一个用于值,一个用于列表项。而且好像也不支持。
@inherits InputSelect //或添加另一个类型参数 @typeparam TListItem
和
<select>
@foreach (var item in List)
{
< option value="???">???</option >
}
</select>
@code{
[Parameter] public Expression<Func<TValue>>? For { get; set; } …Run Code Online (Sandbox Code Playgroud) 我有一个 C# 类库,它将在 2 个不同的项目中使用。其中一个应该访问所有公共类和方法,另一个应该只访问某些类和方法。
什么是最好的解决方案?
我有一个 Blazor 组件,它只有一个 razor 文件(后面没有 razor.cs 代码)并希望从接口继承该组件,首先我尝试了以下操作:
MyComponent.razor :
@inherits IMyInterface
Run Code Online (Sandbox Code Playgroud)
然后在构建后,我在 .cs 生成的代码(由 Visual Studio 中)中得到一个错误,我意识到该组件仅从我的界面而不是ComponentBase类派生。这是生成的代码:
...
public partial class MyComponent: IMyInterface
{
#pragma warning disable 1998
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder __builder)
{
}
#pragma warning restore 1998
}
...
Run Code Online (Sandbox Code Playgroud)
所以我得到了“找不到合适的方法来覆盖”错误。
然后我尝试了以下代码并得到了所有这些代码的编译错误:
// 1) multiple inheritance
@inherits ComponentBase,IMyInterface
// 2) adding semicolon
@inherits ComponentBase,IMyInterface;
// 3) mutiple @inherits directive
@inherits ComponentBase
@inherits IMyInterface
Run Code Online (Sandbox Code Playgroud)
通过在文件MyComponent.razor.cs后面添加代码并在那里编写继承代码解决了问题,但我想知道是否可以在 razor 文件中具有多个接口继承?
我在后端使用 ASP.NET Core Web API,并在 Blazor WASM 客户端的 httpClient 标头中使用 JWT 令牌(我不在 cookie 中存储 JWT 令牌)。
问题是,虽然用户已登录并且身份验证和授权工作没有问题,但在每个控制器(继承自ControllerBase)中始终:
HttpContext.User.Identity.IsAuthenticated是假的HttpContext.User.Identity.Name一片空白HttpContext.User.Claims一片空白但请求具有 JWT 令牌(Request.Headers["Authorization"][0]等于Bearer eyJhbGciOiJIUzI1...)并且[Authorize]属性正常工作。
这是我的startup.cs的样子:
services.AddIdentity()
services.AddSingleton<IAuthorizationPolicyProvider, AuthorizeExPolicyProvider>();
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = false,
ValidateAudience = false,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(Configuration["jwt:key"])),
ClockSkew = TimeSpan.Zero
});
services.AddAuthorization(options =>
{
});
Run Code Online (Sandbox Code Playgroud)
我还按正确的顺序调用了中间件:
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers(); …Run Code Online (Sandbox Code Playgroud) c# ×12
asp.net-core ×7
blazor ×7
webassembly ×2
.net ×1
.net-core ×1
biginteger ×1
casting ×1
encryption ×1
generics ×1
getproperty ×1
java ×1
jwt ×1
leaflet ×1
oop ×1
public-key ×1
razor ×1
razor-pages ×1
reflection ×1
rsa ×1
signalr ×1