C# WebApi属性路由不使用[FromUri]

C# WebApi属性路由不使用[FromUri],c#,asp.net-web-api2,C#,Asp.net Web Api2,我有一个webapi方法,如下所示 [HttpGet] [Route("students")] public string Get([FromUri]Student student) { return "value"; } 我的网络配置是 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api

我有一个webapi方法,如下所示

[HttpGet]
[Route("students")]
public string Get([FromUri]Student student)
{
    return "value";
}
我的网络配置是

    config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
当我不使用[Route(“…”)属性时,我会填充student对象,如果我使用[Route(“…”),则该对象为空

谁能帮我解决这个问题

谢谢

当您使用
[路线(“学生”)]
以下URL将匹配
http://localhost/students?Name=name&Age=12
假设您的
学生
班级有
姓名
年龄
属性

当您不提供任何查询参数时,它将为null,这是预期的行为

如果
Student
对象是一个
struct
,它将是必需的参数,因此当您使用
[Route(“students”)]时,您将从WebApi获得异常,而不是null
以下URL将匹配
http://localhost/students?Name=name&Age=12
假设您的
学生
班级有
姓名
年龄
属性

当您不提供任何查询参数时,它将为null,这是预期的行为


如果您
Student
对象是一个
struct
,它将是必需的参数,因此您将从WebApi获得异常,而不是null,只需检查它是否为null即可

[HttpGet]
[Route("students")]
public string Get([FromUri] Student student)
{
    if (student == null)
        student = new Student();
    return "value";
}

简单地说,检查它是否为null

[HttpGet]
[Route("students")]
public string Get([FromUri] Student student)
{
    if (student == null)
        student = new Student();
    return "value";
}

您请求的URL是什么?当我访问=>student参数为空时,当我访问时,如果student参数不是空时,请添加
student
定义,它可能有助于诊断问题。您请求的URL是什么?当我访问=>student参数为空时,当我访问时,如果student参数不是Null,请添加
student
定义,它可能有助于诊断问题。是。但这正是我所期待的。如果我将custommodelbinder与[FromUri]属性一起使用,它会起作用。奇怪的是,我的代码与您的代码完全相同,并且它在没有
custommodelbinder
的情况下对我有效,但仅在
[FromUri]
是的情况下有效。但这正是我所期待的。如果我将custommodelbinder与[FromUri]属性一起使用,它会起作用。奇怪的是,我的代码与您的代码完全相同,并且它在没有
custommodelbinder
的情况下对我有效,但仅在
[FromUri]