小编Gwi*_*inn的帖子

如何在ASP.Net Core MVC的IValidatableObject.Validate方法中正确本地化验证

我有一个实现IValidatableObject的模型,我需要本地化ValidationResults,我该如何正确实现呢?

目前我想出了一个IValidatableObject.Validate方法,如下所示:

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
    var stringLocalizer = validationContext.GetService(typeof(IStringLocalizer<MyModel>)) as IStringLocalizer<MyModel>;

    //Validation logic implementation...

    yield return new ValidationResult(stringLocalizer["This thing is the error message"]);
}
Run Code Online (Sandbox Code Playgroud)

我在这里做的是使用ValidationContext.GetService方法定位IStringLocalizer实例.

这种方法有效,但我的主要问题是我不完全确定这是正确的,特别是因为我需要依赖服务定位器来获取IStringLocalizer

c# asp.net asp.net-core-mvc asp.net-core

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

在ASP .NET Core中初始化主机之前,如何读取配置设置?

在初始化应用程序主机之前,我需要从应用程序的配置中读取一些设置以进行其他设置。

在ASP.NET Core 2.x中,在初始化应用程序主机之前读取设置,我曾用来执行以下操作:

public static void Main(string[] args)
{
    //...

    var configuration = new ConfigurationBuilder()
        .AddEnvironmentVariables()
        .AddCommandLine(args)
        .AddJsonFile("appsettings.json")
        .Build();

    //Do something useful with the configuration...

    var host = WebHost.CreateDefaultBuilder()
        .UseStartup<Startup>()
        .UseConfiguration(configuration)
        .Build();

    //...
}

Run Code Online (Sandbox Code Playgroud)

在ASP中,WebHost 不建议使用 .NET Core 3.x ,而应使用.NET Generic Host
.NET通用主机只有一个.ConfigureHostConfiguration().ConfigureAppConfiguration()并且不将内置配置作为参数,而是仅接受用于设置配置的委托。

对于HTTP工作负载,您仍然可以使用该方法.UseConfiguration()公开的方法,IWebHostBuilder并且基本上与以前相同:

public static void Main(string[] args)
{
    //...

    var configuration = new ConfigurationBuilder()
        .AddEnvironmentVariables()
        .AddCommandLine(args)
        .AddJsonFile("appsettings.json")
        .Build();

    //Do something useful with the configuration...

    var host = …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core asp.net-core-3.0

3
推荐指数
2
解决办法
253
查看次数

使用React钩子强制触发异步请求

我在决定如何强制性地触发API调用时遇到麻烦,例如,单击按钮时。
我不确定使用钩子的正确方法是什么,因为似乎不止一种方法,但是我不知道哪种方法是“最佳”方法以及最终的含义。

我发现以下示例非常简单,可以满足我的要求:

使用useEffect()和触发值

function SomeFunctionComponent() {
  const [fakeData, setFakeData] = useState(0);
  const [trigger, setTrigger] = useState(false);

  async function fetchData() {
    if (!trigger) return;

    const newData = await someAPI.fetch();

    setTrigger(false);
    setFakeData(newData);
  }

  useEffect(() => {
    fetchData();
  }, [trigger]);

  return (
    <React.Fragment>
      <p>{fakeData}</p>
      <button onClick={() => setTrigger(!trigger)}>Refresh</button>
    </React.Fragment>
  );
}
Run Code Online (Sandbox Code Playgroud)

只需调用API,然后调用setState()

function SomeFunctionComponent() {
  const [fakeData, setFakeData] = useState(0);

  async function fetchData() {
    const newData = await someAPI.fetch();

    setFakeData(newData);
  }

  return (
    <React.Fragment>
      <p>{fakeData}</p>
      <button onClick={fetchData}>Refresh</button>
    </React.Fragment>
  ); …
Run Code Online (Sandbox Code Playgroud)

reactjs react-hooks

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