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作为一个数字。

您需要在
图像控制器
中有一个方法,它接受
字符串电子邮件
作为参数。您需要在
图像控制器
中有一个方法,它接受
字符串电子邮件
作为参数。