Luc*_*iva 2 asp.net asp.net-mvc-4 asp.net-web-api
我正在使用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为任何询问的键返回,所以它总是在需要时为模型绑定器提供一个值。ValueProvider 在 WebApiConfig 中注册,如下所示:
WebApiConfig.cs
config.Services.Add(typeof(ValueProviderFactory), new DummyValueProviderFactory());
代码编译并运行良好。我在 Account API 控制器中也有这个操作:
账户控制器.cs
public HttpResponseMessage Register(string foo) { ... }
当我像下面这样调用它时,这个动作被调用得很好:
/register?foo=bar
并foo充满了bar预期;但如果我打电话:
/register
服务器返回 404 消息No HTTP resource was found that matches the request URI 'http://localhost:14459/register'。
此外,我在方法 ContainsPrefix() 和 GetValue() 中放置了断点,但它们从未被触发。
我究竟做错了什么?DummyValueProvider 不应该为testing参数提供值foo吗?
尝试这个
public HttpResponseMessage Get([ValueProvider(typeof(DummyValueProviderFactory))] string foo) {... }
我强烈建议您阅读这篇最近的文章来自定义 Web Api 绑定。
更新:
阅读文章后,OP 能够找到解决方案。使用参数属性[ModelBinder]是它工作所必需的。这是因为除非参数被注释,否则[FromUri]是假设的。一旦使用[ModelBinder]注册的处理程序进行注释就被执行。
| 归档时间: | 
 | 
| 查看次数: | 1071 次 | 
| 最近记录: |