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();
}
}
Run Code Online (Sandbox Code Playgroud)
这个 ValueProvider 应该true
为任何询问的键返回,所以它总是在需要时为模型绑定器提供一个值。ValueProvider 在 WebApiConfig 中注册,如下所示:
WebApiConfig.cs
config.Services.Add(typeof(ValueProviderFactory), new DummyValueProviderFactory());
Run Code Online (Sandbox Code Playgroud)
代码编译并运行良好。我在 Account API 控制器中也有这个操作:
账户控制器.cs
public HttpResponseMessage Register(string foo) { ... }
Run Code Online (Sandbox Code Playgroud)
当我像下面这样调用它时,这个动作被调用得很好:
/register?foo=bar
Run Code Online (Sandbox Code Playgroud)
并foo
充满了bar
预期;但如果我打电话:
/register
Run Code Online (Sandbox Code Playgroud)
服务器返回 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) {... }
Run Code Online (Sandbox Code Playgroud)
我强烈建议您阅读这篇最近的文章来自定义 Web Api 绑定。
更新:
阅读文章后,OP 能够找到解决方案。使用参数属性[ModelBinder]
是它工作所必需的。这是因为除非参数被注释,否则[FromUri]
是假设的。一旦使用[ModelBinder]
注册的处理程序进行注释就被执行。
归档时间: |
|
查看次数: |
1071 次 |
最近记录: |