我正在使用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 控制器中也有此操作:
AccountController.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
吗?