在WebApiConfig中,我有以下内容:
config.Routes.MapHttpRoute("Alerts", "alerts/{username}/{scope}/{language}",new { controller = "Alerts", language = RouteParameter.Optional });
在我的AlertsController中,我有这个:
public async Task<HttpResponseMessage> GetAsync(string username, string scope, string language = "en")
{
if (string.IsNullOrWhiteSpace(username))
{
return this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Username cannot be null.");
}
if (string.IsNullOrWhiteSpace(scope))
{
return this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Scope cannot be null.");
}
var scp = this._scopeFactory.GetScope(scope);
var alerts = await scp.GetAlerts(username, scope).ConfigureAwait(false);
return this.Request.CreateResponse(HttpStatusCode.OK, alerts);
}
我想要实现的是当我在浏览器中输入http://www.localhost.com/alerts(没有给出用户名和范围),以json格式看“用户名不能为空”和“范围不能为空”。
现在我找不到资源,这是有道理的,因为路由器无法匹配这样的资源。你知道是否有可能通过一些配置改变(或者其他东西)实现我想要的东西?
答案 0 :(得分:1)
我必须设置可以为空的参数才能使其正常工作。
public async Task<HttpResponseMessage> GetAsync(string username = null, string scope = null, string language = "en")
在WebApiConfig中,我必须将它们作为可选项:
config.Routes.MapHttpRoute("Alerts", "alerts/{username}/{scope}/{language}",new { controller = "Alerts", username = RouteParameter.Optional, scope = RouteParameter.Optional, language = RouteParameter.Optional });