Ошибка: UrlHelper.Link не должен возвращать ноль
Я новичок в C#.net. Я создаю REST-сервисы здесь. Я хочу создать Post-data-данные, вставленные в базу данных, но в ответ я получил эту ошибку. UrlHelper.Link must not return 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);
}
1 ответ
Я предполагал, что вы используете настройку по умолчанию внутри WebApiConfig
класс в App_Start
папка такая:
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
должен совпадать с именем целевого параметра, используемого в методе действия, в противном случае UrlHelper.Link()
Метод вернет ноль.
2) Название маршрута в RouteAttribute
должно отличаться от имени метода действия, чтобы избежать путаницы.
Ссылка:
Маршрутизация атрибутов в ASP.NET Web API 2: имена маршрутов
Связанная проблема: