I've an Action in my ApiController that I want to invoke from a specific link, so I created this simple route
[Route("Rest/GetName/{name}")]
public IHttpActionResult GetName(string name) {
// cut - code here is trivial but long, I just fill in an object to return as Json code
return Json(myObject);
}
It works fine but I want to make the parameter optional. According to documentation adding a question point at the end of the parameter name in the route should be enough
[Route("Rest/GetName/{name?}")]
This way I get an error if I don't provide the optional parameter, so
.../Rest/GetName/AnyName --> ok
.../Rest/GetName/ --> error (see below)
{"Message":"No HTTP resource was found that matches the request URI ' https://localhost/miApp/Rest/GetName '.","MessageDetail":"No action was found on the controller 'Rest' that matches the request."}
Web API requires to explicitly set optional values even for nullable types and classes.
Use default value to optional parameter:
[Route("Rest/GetName/{name?}")]
public IHttpActionResult GetName(string name = null) {
// cut - code here is trivial but long, I just fill in an object to return as Json code
return Json(myObject);
}
And don't forget about routing registration:
httpConfig.MapHttpAttributeRoutes()
There are many possible solutions:
Try Optional Parameter
[Route("Rest/GetName/{name?}")] public IHttpActionResult GetName(string name = null) { // cut - code here is trivial but long, I just fill in an obj ect to return as `enter code here`Json code return Json(myObject); }
2. Set PreFix on controller first
[RoutePrefix("api/Rest")]
[Authorize]
public class RestController : ApiController
{
[Route("/GetName/{name}")]
public IHttpActionResult GetName(string name = null)
{
// cut - code here is trivial but long, I just fill in an object
to return as Json code
return Json(myObject);
}
}
3. Write parameter before action name in route
[RoutePrefix("api/Rest")]
[Authorize]
public class RestController : ApiController
{
[Route("{name}/GetName")]
public IHttpActionResult GetName(string name = null)
{
// cut - code here is trivial but long, I just fill in an object
to return as Json code
return Json(myObject);
}
}
Hopefully this will help you to resolve your problem.Thanks
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.