小编nAv*_*viD的帖子

在C#.NET中即时转换为Type

我想将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)

c# reflection casting getproperty

20
推荐指数
1
解决办法
3万
查看次数

@namespace 指令在 Blazor 中不起作用

我有一个带有 Blazor 组件的 Razor 类库,并且想要为该组件设置命名空间,但出现编译错误:

@namespace MY.UI.Blazor.Component;
Run Code Online (Sandbox Code Playgroud)

我收到以下编译错误:

错误 RZ1014:“命名空间”指令需要命名空间名称。

c# asp.net-core razor-pages blazor

8
推荐指数
1
解决办法
2328
查看次数

服务器端 Blazor 中的 Google 身份验证不起作用

我正在尝试在 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)

c# google-authentication asp.net-core blazor

7
推荐指数
0
解决办法
815
查看次数

在磁盘上找到 Blazor Webassembly 下载的 .dll 文件?

我想找到.dll文件已经通过发货文件Blazor(网络组件)像Chrome浏览器,看看是否.DLL文件,可以通过反汇编程序读取(如反射镜)或没有。我在 Chrome 中找到了这些文件

开发者工具(F12) > 应用程序选项卡 > 缓存存储

但在磁盘上找不到它们。

更新:假设我想要访问其他人的 Blazor 网站的.dll文件。网站访问者的计算机上的以下文件在哪里?

在此处输入图片说明

在此处输入图片说明

c# webassembly asp.net-core blazor

6
推荐指数
1
解决办法
1054
查看次数

如何在.net core中使用Openstreetmap(osm)离线图块文件?

我有Leaflet用于显示小区域地图的Web应用程序。问题在于该应用程序必须脱机工作(在LAN上),并且从中加载地图图块Openstreetmap。我下载了所需的磁贴,但找不到关于如何使用下载的文件(扩展名为.mbtiles的500MB文件)的良好文档。这是Leaflet建议的默认方法:

    L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
        attribution: '&copy; <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)

c# openstreetmap leaflet .net-core asp.net-core-webapi

5
推荐指数
1
解决办法
780
查看次数

反序列化 RSA 公钥和私钥 C#

作为我的项目的一部分,我必须使用 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)

c# encryption serialization rsa public-key

5
推荐指数
1
解决办法
2270
查看次数

将附加数据传递到 Blazor 组件中的通用 RenderFragment

我有一个简单的 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)

c# generics asp.net-core blazor

5
推荐指数
1
解决办法
9808
查看次数

为什么 C# 和 Java BigInteger 转换 byte[] 的方式不同?

这是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 相同的方式转换字符串?

c# java biginteger

4
推荐指数
1
解决办法
105
查看次数

如何在 Blazor 中发送大小超过 Signalr 消息大小限制的数据?

我们知道它Blazor用于SignalR客户端和服务器之间的通信,并且还有消息大小限制SignalR(当前为32k)。如何从服务器向客户端发送超过 32k 的数据,反之亦然?

c# signalr webassembly asp.net-core blazor

4
推荐指数
1
解决办法
5015
查看次数

使用 Blazor 创建接受列表的 InputSelect 组件

使用 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# asp.net-core blazor blazor-webassembly

4
推荐指数
1
解决办法
1万
查看次数

限制对 C#.NET 中的类库的访问

我有一个 C# 类库,它将在 2 个不同的项目中使用。其中一个应该访问所有公共类和方法,另一个应该只访问某些类和方法。

什么是最好的解决方案?

.net oop class-library access-modifiers multiple-projects

2
推荐指数
1
解决办法
1372
查看次数

Blazor razor 文件中接口的多重继承

我有一个 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 文件中具有多个接口继承?

c# multiple-inheritance razor asp.net-core blazor

2
推荐指数
1
解决办法
1440
查看次数

.NET Core Web API HttpContext.User.Claims 和 HttpContext.User.Identity 在控制器中始终为 null

我在后端使用 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# jwt asp.net-core-webapi asp.net-core-identity

0
推荐指数
1
解决办法
7653
查看次数