C#配置RESTful路由
我想有一个旅行路线C#配置RESTful路由,c#,C#,我想有一个旅行路线 {domain}/v1/images/{id}和{domain}/v1/images/{email} 第一条路径正在运行(例如:v1/images/1?size=100),但当我尝试第二条路径时(例如:v1/images/foo@domain.com?size=100我得到这个错误: 参数字典包含的参数“id”为空 方法的不可为Null的类型“System.Int32” 'System.Net.Http.HttpResponseMessage Get(Int32, “..Im
{domain}/v1/images/{id}
和{domain}/v1/images/{email}
第一条路径正在运行(例如:v1/images/1?size=100
),但当我尝试第二条路径时(例如:v1/images/foo@domain.com?size=100
我得到这个错误:
参数字典包含的参数“id”为空
方法的不可为Null的类型“System.Int32”
'System.Net.Http.HttpResponseMessage Get(Int32,
“..ImageController”中的System.Nullable“1[System.Int32])。一个
可选参数必须是引用类型、可为null的类型或
声明为可选参数。“
我的路由配置如下:
routes.MapHttpRoute(
name: "Image",
routeTemplate: "v1/images/{id}",
defaults: new { controller = "Image", size = RouteParameter.Optional }
);
routes.MapHttpRoute(
name: "ImageByEmail",
routeTemplate: "v1/images/{email}",
defaults: new { controller = "Image", size = RouteParameter.Optional }
);
是否可以通过id或电子邮件获取图像?路由器没有机会确定是否为
v1/images/foo@domain.com?size=100
转到/v1/images/{id}
或/v1/images/{email}
。它以静默方式选择/v1/images/{id}
并尝试解析”foo@domain.com“
作为int
,解析失败,并且由于id
参数(int-id)
不是可选的(与(int-id)
相反),它抛出一个错误。路由器没有机会识别v1/映像是否为/foo@domain.com?size=100
转到/v1/images/{id}
或/v1/images/{email}
。它默默地选择/v1/images/{id}
并尝试解析”foo@domain.com“
作为int
,解析失败,因为id
参数(int-id)
不是可选的(与(int-id)
相反),它会抛出一个错误
routes.MapHttpRoute(
name: "Image",
routeTemplate: "v1/images/{id}",
defaults: new {
controller = "Image",
size = RouteParameter.Optional,
id = @"\d+" }
);
@“\d+”
将验证id是否为数字
@“\d+”
将验证id作为一个数字。您需要在图像控制器
中有一个方法,它接受字符串电子邮件
作为参数。您需要在图像控制器
中有一个方法,它接受字符串电子邮件
作为参数。