I am creating a web api using mvc 6. now i am trying to get a element from my db. the key in this table is a string (email address). I do not have access to this database so i cant change the key of this table.
Now when creating a demo webapi i was able to create a controller to extract items based on a key which was an int. But when trying to get a element by a string the program crashes.
[Route("api/[controller]")] public class TodoController : Controller { [HttpGet("{id:string}", Name = "GetByIdRoute")] public IActionResult GetById (string id) { var item = _items.FirstOrDefault(x => x.Id == id); if (item == null) { return HttpNotFound(); } return new ObjectResult(item); } }
when trying to access this path (example.com/api/Todo/key) key being the string i get an exception in my startup.cs
the exception in the browser reads:
System.InvalidOperationException The constraint entry 'id' - 'string' on the route 'api/Todo/{id:string}' could not be resolved by the constraint resolver of type 'DefaultInlineConstraintResolver'.
the part of the startup.cs where the code breaks is:
// Add MVC to the request pipeline. app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller}/{action}/{id?}", defaults: new { controller = "Home", action = "Index" }); });
i cant seem to figure out why i ain't allowed to get a item by a key which is a string. is this even possible and if so what am i doing wrong?
The innerText property returns: Just the text content of the element and all its children, without CSS hidden text spacing and tags, except <script> and <style> elements. The textContent property returns: The text content of the element and all descendaces, with spacing and CSS hidden text, but without tags.
Use the document. querySelectorAll() method to get all elements whose id starts with a specific string, e.g. document. querySelectorAll('[id^="box"]') . The method returns a NodeList containing all the elements that match the provided selector.
Just remove :string
. You're not really constraining the value of the id
anyway - it's already a string in the URL.
This fairly old blog post lists the available constraints - and you can see there's no :string
constraint, because you don't need there to be.
The constraints are used to give "more specific" constraints a priority - e.g. "If that part of the URL is the string representation of a DateTime
, use this route" - but as everything is a string (in a URL), there's nothing that a constraint of :string
would make it more specific than, if you see what I mean.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With