【问题标题】:Error : UrlHelper.Link must not return null错误:UrlHelper.Link 不得返回 null
【发布时间】:2019-05-27 15:27:28
【问题描述】:

我正在创建 REST 服务。在这里,我想创建一个 Post 服务。数据被插入到数据库中,但作为响应我得到了这个错误

UrlHelper.Link 不能返回 null..

我的代码

  [HttpPost]
       [Route("api/CourseRegistrations")]
    [ResponseType(typeof(CourseRegistration))]
    public IHttpActionResult PostCourseRegistration(CourseRegistration         courseRegistration)
    {
        if (!ModelState.IsValid)
        {
           return BadRequest(ModelState);
        }

        db.CourseRegistrations.Add(courseRegistration);
        db.SaveChanges();

        return CreatedAtRoute("DefaultApi", new { id = courseRegistration.course_id }, courseRegistration);
    }

【问题讨论】:

  • 我怀疑您提供的代码是否相关。您介意显示几行堆栈跟踪吗?

标签: c# asp.net asp.net-web-api asp.net-mvc-5


【解决方案1】:

我假设您在 App_Start 文件夹中的 WebApiConfig 类中使用默认设置,如下所示:

public static class WebApiConfig {
    public static void Register(HttpConfiguration config) {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

因此需要在CreatedAtRoute方法中提供控制器名称参数,如下例:

return CreatedAtRoute("DefaultApi", new { controller = "ApiControllerName", id = courseRegistration.course_id }, courseRegistration);

但是,由于存在RouteAttribute,则表明属性路由已启用,因此您应该为GET路由提供路由名称和正确的参数名称,然后设置POST路由,如下例所示:

// GET method
[HttpGet]
[Route("api/CourseRegistrations/{id}", Name = "GetCourseRegistrationById")]
[ResponseType(typeof(CourseRegistration))]
public IHttpActionResult GetCourseRegistration(int id)
{
    // do something
}

// POST method
[HttpPost]
[Route("api/CourseRegistrations")]
public IHttpActionResult PostCourseRegistration(CourseRegistration courseRegistration)
{
    if (!ModelState.IsValid)
    {
       return BadRequest(ModelState);
    }

    db.CourseRegistrations.Add(courseRegistration);
    db.SaveChanges();

    // replace 'DefaultApi' with route name for redirect to GET method
    return CreatedAtRoute("GetCourseRegistrationById", new { id = courseRegistration.course_id }, courseRegistration);
}

注意:

1)CreatedAtRoute中包含的参数名称必须与action方法中使用的目标参数名称匹配,否则UrlHelper.Link()方法将返回null。

2) RouteAttribute 中的路由名称应与操作方法名称不同,以免混淆。

参考:

Attribute Routing in ASP.NET Web API 2: Route Names

相关问题:

Attribute Routing and CreatedAtRoute

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-20
    • 2017-11-03
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    相关资源
    最近更新 更多