gpt4 book ai didi

asp.net - 永远不会调用 ValueProvider

转载 作者:行者123 更新时间:2023-12-05 02:23:58 25 4
gpt4 key购买 nike

我正在使用 MVC 4 Web API 并且我有这个虚拟 ValueProvider:

DummyValueProvider.cs

class DummyValueProvider : IValueProvider
{
public DummyValueProvider()
{
}

public bool ContainsPrefix(string prefix)
{
return true;
}

public ValueProviderResult GetValue(string key)
{
return new ValueProviderResult("testing", "testing", System.Globalization.CultureInfo.InvariantCulture);
}
}

class DummyValueProviderFactory : System.Web.Http.ValueProviders.ValueProviderFactory
{
public override IValueProvider GetValueProvider(System.Web.Http.Controllers.HttpActionContext actionContext)
{
return new DummyValueProvider();
}
}

这个 ValueProvider 应该为任何请求的键返回 true,所以它总是会在需要时向模型绑定(bind)器提供一个值。 ValueProvider 像这样在 WebApiConfig 中注册:

WebApiConfig.cs

config.Services.Add(typeof(ValueProviderFactory), new DummyValueProviderFactory());

代码编译并运行良好。我在帐户 API Controller 中也有此操作:

AccountController.cs

public HttpResponseMessage Register(string foo) { ... }

当我像下面这样调用它时,该操作被调用得很好:

/register?foo=bar

并且 foo 按预期填充了 bar;但如果我打电话:

/register

服务器返回 404 消息 没有找到匹配请求 URI 'http://localhost:14459/register' 的 HTTP 资源。

此外,我在 ContainsPrefix() 和 GetValue() 方法中放置了断点,但它们从未被触发。

我做错了什么? DummyValueProvider 不应该向参数 foo 提供值 testing 吗?

最佳答案

试试这个

public HttpResponseMessage Get([ValueProvider(typeof(DummyValueProviderFactory))] string foo) {... }

我强烈建议您阅读 this recent article自定义 Web Api 绑定(bind)。

更新:
阅读文章后,OP 能够找到解决方案。它需要使用参数属性 [ModelBinder] 才能工作。这是因为除非参数被注释,否则假定为 [FromUri]。一旦用 [ModelBinder] 注释,注册的处理程序就会被执行。

关于asp.net - 永远不会调用 ValueProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17756138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com