Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get element based on string

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?

like image 318
Ivan Sander de Jong Avatar asked Jun 20 '15 07:06

Ivan Sander de Jong


People also ask

How do I get the innerText element?

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.

How do I get querySelectorAll ID?

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.


1 Answers

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.

like image 150
Jon Skeet Avatar answered Sep 28 '22 15:09

Jon Skeet