[{"data":1,"prerenderedAt":349},["ShallowReactive",2],{"post-\u002Fseo-friendly-urls-asp-net-core\u002F":3},{"id":4,"title":5,"author":6,"body":7,"comments":212,"date":326,"dateModified":327,"description":328,"extension":329,"headings":330,"heroImage":336,"meta":337,"path":338,"permalink":338,"published":339,"stem":340,"tags":341,"timeToRead":348},"posts\u002Fposts\u002F2016\u002Fseo-friendly-urls-asp-net-core\u002Findex.md","SEO Friendly URL's for ASP.NET Core","Muhammad Rehan Saeed",{"type":8,"value":9,"toc":209},"minimark",[10,14,37,60,73,76,86,89,92,103,106,113,125,128,139,151,154,176,179,190,205],[11,12,13],"p",{},"For some reason there are not a lot of Search Engine Optimization (SEO) blog posts or projects out there. Taking a few simple steps can make your site rank higher in Google or Bing search results so it's well worth doing. Here are a few other of my SEO related blog posts:",[15,16,17,25,31],"ul",{},[18,19,20],"li",{},[21,22,24],"a",{"href":23},"\u002Fcanonical-urls-for-asp-net-mvc\u002F","Canonical URL's for ASP.NET MVC",[18,26,27],{},[21,28,30],{"href":29},"\u002Fdynamically-generating-sitemap-xml-for-asp-net-mvc\u002F","Dynamically Generating Sitemap.xml for ASP.NET MVC",[18,32,33],{},[21,34,36],{"href":35},"\u002Fdynamically-generating-robots-txt-using-asp-net-mvc\u002F","Dynamically Generating Robots.txt Using ASP.NET MVC",[38,39,41,59],"h1",{"id":40},"what-is-an-seo-friendly-url",[21,42,45],{"href":43,"aria-hidden":44},"#what-is-an-seo-friendly-url","true",[46,47,53],"svg",{"xmlns":48,"xmlns:xlink":49,"viewBox":50,"version":51,"width":52,"height":52,"aria-hidden":44},"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink","0 0 16 16","1.1",22,[54,55],"path",{"fill":56,"fill-rule":57,"d":58},"currentColor","evenodd","M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z","What is an SEO Friendly URL?",[11,61,62,63,72],{},"This Mozilla blog post called '",[21,64,71],{"href":65,"rel":66,"target":70},"https:\u002F\u002Fmoz.com\u002Fblog\u002F15-seo-best-practices-for-structuring-urls",[67,68,69],"nofollow","noopener","noreferrer","_blank","15 best practices for structuring URL's'"," is the best article on the subject of SEO friendly URL's I found and it's well worth a read.",[11,74,75],{},"Essentially you want a simple short URL that tells the user what they are clicking on at a glance. It should also contain keywords pertaining to what is on the page for better Search Engine Optimization (SEO). In short, a page will appear higher up in search results if the term a user searches for appears in the URL. Your URL should look like this:",[11,77,78],{},[79,80],"img",{"alt":81,"src":82,"width":83,"height":84,"loading":85},"SEO Friendly URL Example","\u002Fcontent-images\u002Fposts\u002F2016\u002Fseo-friendly-urls-asp-net-core\u002Fimages\u002FSEO-Friendly-URL.png",915,96,"lazy",[11,87,88],{},"The URL contains an ID for a product and ends with a friendly title. The title contains alphanumeric characters with dashes instead of spaces. Note that the ID of the product is still included in the URL, to avoid having to deal with two friendly titles with the same name.",[11,90,91],{},"If you elect to omit the ID, then you have to do a lot of footwork to make things work. Firstly, you have to use the title as a kind of primary key to get the product data from your database and secondly, you also have to figure out what to do when there are two pages with the same title. Each time you want to create a new title, you have to scan your data store to see if the title already exists and if it does either error and force the creation of a different title or add make it unique by adding a number on the end. This is a lot of work but does produce a nicer URL, the choice is yours.",[38,93,95,102],{"id":94},"how-to-build-one",[21,96,98],{"href":97,"aria-hidden":44},"#how-to-build-one",[46,99,100],{"xmlns":48,"xmlns:xlink":49,"viewBox":50,"version":51,"width":52,"height":52,"aria-hidden":44},[54,101],{"fill":56,"fill-rule":57,"d":58},"How to Build One",[11,104,105],{},"Take a look at the controller action below. It is a very simple example of how to use SEO friendly URL's. In our example we have a product class which has a ID and title properties, where the title is just the name of the product.",[107,108],"pre",{"className":109,"language":110,"meta":111,"style":111,"html":112},"language-cs shiki shiki-themes light-plus monokai","cs","","\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">[\u003C\u002Fspan>\u003Cspan class=\"sw29p\">HttpGet\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"swiDo\">\"product\u002F{id}\u002F{title}\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">, \u003C\u002Fspan>\u003Cspan class=\"sFrd5\">Name\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> \"GetProduct\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)]\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">public\u003C\u002Fspan>\u003Cspan class=\"sw29p\"> IActionResult\u003C\u002Fspan>\u003Cspan class=\"sWm5y\"> GetProduct\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sJvqV\">int\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> id\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">, \u003C\u002Fspan>\u003Cspan class=\"sJvqV\">string\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> title\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">{\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F Get the product as indicated by the ID from a database or some repository.\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s4J9F\">    var\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> product\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"sK46n\"> this\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">productRepository\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">Find\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">id\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">);\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan>\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F If a product with the specified ID was not found, return a 404 Not Found response.\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">    if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">product\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> ==\u003C\u002Fspan>\u003Cspan class=\"sMc8R\"> null\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">    {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        return\u003C\u002Fspan>\u003Cspan class=\"sK46n\"> this\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">NotFound\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">();\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">    }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan>\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F Get the actual friendly version of the title.\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">    string\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> friendlyTitle\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> FriendlyUrlHelper\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">GetFriendlyTitle\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">product\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">Title\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">);\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan>\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F Compare the title with the friendly title.\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">    if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"snCLD\">!\u003C\u002Fspan>\u003Cspan class=\"sJvqV\">string\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">Equals\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">friendlyTitle\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">, \u003C\u002Fspan>\u003Cspan class=\"sFrd5\">title\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">, \u003C\u002Fspan>\u003Cspan class=\"sFrd5\">StringComparison\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">Ordinal\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">))\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">    {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">        \u002F\u002F If the title is null, empty or does not match the friendly title, return a 301 Permanent\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">        \u002F\u002F Redirect to the correct friendly URL.\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        return\u003C\u002Fspan>\u003Cspan class=\"sK46n\"> this\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">RedirectToRoutePermanent\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"swiDo\">\"GetProduct\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">, \u003C\u002Fspan>\u003Cspan class=\"sJvqV\">new\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> { \u003C\u002Fspan>\u003Cspan class=\"sFrd5\">id\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> id\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">, \u003C\u002Fspan>\u003Cspan class=\"sFrd5\">title\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> friendlyTitle\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> });\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">    }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan>\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F The URL the client has browsed to is correct, show them the view containing the product.\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">    return\u003C\u002Fspan>\u003Cspan class=\"sK46n\"> this\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">View\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">product\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">);\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">}\n\u003C\u002Fspan>\u003C\u002Fspan>",[11,114,115,116,120,121,124],{},"All the work is done by the ",[117,118,119],"code",{},"FriendlyUrlHelper"," which turns the product title which may contain spaces, numbers or other special characters (which would not be allowed in a URL without escaping them) into a ",[117,122,123],{},"lower-kebab-case"," title.",[11,126,127],{},"This generated friendly title is compared with the one that is passed in and if it is different (Someone may have omitted the friendly title or mis-spelled it) we perform a permanent redirect to the product with the same ID but now with the friendly title. This is important for SEO purposes, we want search engines to only find one URL for each product. Finally, if the friendly title matches the one passed in we return the product view.",[38,129,131,138],{"id":130},"the-friendlyurlhelper",[21,132,134],{"href":133,"aria-hidden":44},"#the-friendlyurlhelper",[46,135,136],{"xmlns":48,"xmlns:xlink":49,"viewBox":50,"version":51,"width":52,"height":52,"aria-hidden":44},[54,137],{"fill":56,"fill-rule":57,"d":58},"The FriendlyUrlHelper",[11,140,141,142,144,145,150],{},"The ",[117,143,119],{}," was inspired by a famous Stack Overflow question '",[21,146,149],{"href":147,"rel":148,"target":70},"https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F25259\u002Fhow-does-stack-overflow-generate-its-seo-friendly-urls\u002F25486",[67,68,69],"How does Stack Overflow generate its SEO-friendly URLs?","'. The full source code for it is shown below.",[107,152],{"className":109,"language":110,"meta":111,"style":111,"html":153},"\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">\u002F\u002F\u002F \u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">summary\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">\u002F\u002F\u002F Helps convert \u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">see\u003C\u002Fspan>\u003Cspan class=\"snDo4\"> cref\u003C\u002Fspan>\u003Cspan class=\"s1q82\">=\u003C\u002Fspan>\u003Cspan class=\"swiDo\">\"string\"\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">\u002F&gt;\u003C\u002Fspan>\u003Cspan class=\"s1q82\"> title text to URL friendly \u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">see\u003C\u002Fspan>\u003Cspan class=\"snDo4\"> cref\u003C\u002Fspan>\u003Cspan class=\"s1q82\">=\u003C\u002Fspan>\u003Cspan class=\"swiDo\">\"string\"\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">\u002F&gt;\u003C\u002Fspan>\u003Cspan class=\"s1q82\">'s that can safely be\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">\u002F\u002F\u002F displayed in a URL.\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">\u002F\u002F\u002F \u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u002F\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">summary\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">public\u003C\u002Fspan>\u003Cspan class=\"sJvqV\"> static\u003C\u002Fspan>\u003Cspan class=\"s4J9F\"> class\u003C\u002Fspan>\u003Cspan class=\"sw29p\"> FriendlyUrlHelper\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">{\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F \u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">summary\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F Converts the specified title so that it is more human and search engine readable e.g.\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F http:\u002F\u002Fexample.com\u002Fproduct\u002F123\u002Fthis-is-the-seo-and-human-friendly-product-title. Note that the ID of the\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F product is still included in the URL, to avoid having to deal with two titles with the same name. Search\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F Engine Optimization (SEO) friendly URL's gives your site a boost in search rankings by including keywords\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F in your URL's. They are also easier to read by users and can give them an indication of what they are\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F clicking on when they look at a URL. Refer to the code example below to see how this helper can be used.\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F Go to definition on this method to see a code example. To learn more about friendly URL's see\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F https:\u002F\u002Fmoz.com\u002Fblog\u002F15-seo-best-practices-for-structuring-urls.\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F To learn more about how this was implemented see\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F http:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F25259\u002Fhow-does-stack-overflow-generate-its-seo-friendly-urls\u002F25486#25486\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F \u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u002F\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">summary\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F \u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">param\u003C\u002Fspan>\u003Cspan class=\"snDo4\"> name\u003C\u002Fspan>\u003Cspan class=\"s1q82\">=\u003C\u002Fspan>\u003Cspan class=\"swiDo\">\"title\"\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\u003C\u002Fspan>\u003Cspan class=\"s1q82\">The title of the URL.\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u002F\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">param\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F \u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">param\u003C\u002Fspan>\u003Cspan class=\"snDo4\"> name\u003C\u002Fspan>\u003Cspan class=\"s1q82\">=\u003C\u002Fspan>\u003Cspan class=\"swiDo\">\"remapToAscii\"\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\u003C\u002Fspan>\u003Cspan class=\"s1q82\">if set to \u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">c\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\u003C\u002Fspan>\u003Cspan class=\"s1q82\">true\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u002F\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">c\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\u003C\u002Fspan>\u003Cspan class=\"s1q82\">, remaps special UTF8 characters like 'è' to their ASCII\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F equivalent 'e'. All modern browsers except Internet Explorer display the 'è' correctly. Older browsers and\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F Internet Explorer percent encode these international characters so they are displayed as'%C3%A8'. What you\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F set this to depends on whether your target users are English speakers or not.\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u002F\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">param\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F \u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">param\u003C\u002Fspan>\u003Cspan class=\"snDo4\"> name\u003C\u002Fspan>\u003Cspan class=\"s1q82\">=\u003C\u002Fspan>\u003Cspan class=\"swiDo\">\"maxlength\"\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\u003C\u002Fspan>\u003Cspan class=\"s1q82\">The maximum allowed length of the title.\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u002F\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">param\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F \u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">returns\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\u003C\u002Fspan>\u003Cspan class=\"s1q82\">The SEO and human friendly title.\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u002F\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">returns\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F \u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">code\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F [HttpGet(\"product\u002F{id}\u002F{title}\", Name = \"GetDetails\")]\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F public IActionResult Product(int id, string title)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F\u003C\u002Fspan>\u003Cspan class=\"s1q82\">     \u002F\u002F Get the product as indicated by the ID from a database or some repository.\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F     var product = ProductRepository.Find(id);\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F\u003C\u002Fspan>\u003Cspan class=\"s1q82\">     \u002F\u002F If a product with the specified ID was not found, return a 404 Not Found response.\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F     if (product == null)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F     {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F         return this.HttpNotFound();\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F     }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F\u003C\u002Fspan>\u003Cspan class=\"s1q82\">     \u002F\u002F Get the actual friendly version of the title.\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F     var friendlyTitle = FriendlyUrlHelper.GetFriendlyTitle(product.Title);\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F\u003C\u002Fspan>\u003Cspan class=\"s1q82\">     \u002F\u002F Compare the title with the friendly title.\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F     if (!string.Equals(friendlyTitle, title, StringComparison.Ordinal))\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F     {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F\u003C\u002Fspan>\u003Cspan class=\"s1q82\">         \u002F\u002F If the title is null, empty or does not match the friendly title, return a 301 Permanent\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F\u003C\u002Fspan>\u003Cspan class=\"s1q82\">         \u002F\u002F Redirect to the correct friendly URL.\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F         return this.RedirectToRoutePermanent(\"GetProduct\", new { id = id, title = friendlyTitle });\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F     }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F\u003C\u002Fspan>\u003Cspan class=\"s1q82\">     \u002F\u002F The URL the client has browsed to is correct, show them the view containing the product.\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F     return this.View(product);\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F \u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u002F\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">code\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">    public\u003C\u002Fspan>\u003Cspan class=\"sJvqV\"> static\u003C\u002Fspan>\u003Cspan class=\"sJvqV\"> string\u003C\u002Fspan>\u003Cspan class=\"sWm5y\"> GetFriendlyTitle\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sJvqV\">string\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> title\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">, \u003C\u002Fspan>\u003Cspan class=\"sJvqV\">bool\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> remapToAscii\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"sMc8R\"> false\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">, \u003C\u002Fspan>\u003Cspan class=\"sJvqV\">int\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> maxlength\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"s0PsH\"> 80\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">    {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">title\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> ==\u003C\u002Fspan>\u003Cspan class=\"sMc8R\"> null\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"sJvqV\"> string\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">Empty\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan>\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">        int\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> length\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> title\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">Length\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">        bool\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> prevdash\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"sMc8R\"> false\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sw29p\">        StringBuilder\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> stringBuilder\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"sJvqV\"> new\u003C\u002Fspan>\u003Cspan class=\"sw29p\"> StringBuilder\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">length\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">);\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">        char\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> c\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan>\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        for\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sJvqV\">int\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> i\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"s0PsH\"> 0\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">; \u003C\u002Fspan>\u003Cspan class=\"sFrd5\">i\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> &lt;\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> length\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">; \u003C\u002Fspan>\u003Cspan class=\"snCLD\">++\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">i\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sFrd5\">            c\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> title\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">[\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">i\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">];\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> ((\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">c\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> &gt;=\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> 'a'\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> &amp;&amp;\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> c\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> &lt;=\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> 'z'\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">) \u003C\u002Fspan>\u003Cspan class=\"snCLD\">||\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">c\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> &gt;=\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> '0'\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> &amp;&amp;\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> c\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> &lt;=\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> '9'\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">))\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">            {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sFrd5\">                stringBuilder\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">Append\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">c\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">);\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sFrd5\">                prevdash\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"sMc8R\"> false\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">            }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            else\u003C\u002Fspan>\u003Cspan class=\"smL5M\"> if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">c\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> &gt;=\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> 'A'\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> &amp;&amp;\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> c\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> &lt;=\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> 'Z'\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">            {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">                \u002F\u002F tricky way to convert to lower-case\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sFrd5\">                stringBuilder\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">Append\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">((\u003C\u002Fspan>\u003Cspan class=\"sJvqV\">char\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">c\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> |\u003C\u002Fspan>\u003Cspan class=\"s0PsH\"> 32\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">));\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sFrd5\">                prevdash\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"sMc8R\"> false\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">            }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            else\u003C\u002Fspan>\u003Cspan class=\"smL5M\"> if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> ((\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">c\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> ==\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> ' '\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">) \u003C\u002Fspan>\u003Cspan class=\"snCLD\">||\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">c\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> ==\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> ','\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">) \u003C\u002Fspan>\u003Cspan class=\"snCLD\">||\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">c\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> ==\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> '.'\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">) \u003C\u002Fspan>\u003Cspan class=\"snCLD\">||\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">c\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> ==\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> '\u002F'\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">) \u003C\u002Fspan>\u003Cspan class=\"snCLD\">||\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">                (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">c\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> ==\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> '\u003C\u002Fspan>\u003Cspan class=\"shFVe\">\\\\\u003C\u002Fspan>\u003Cspan class=\"swiDo\">'\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">) \u003C\u002Fspan>\u003Cspan class=\"snCLD\">||\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">c\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> ==\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> '-'\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">) \u003C\u002Fspan>\u003Cspan class=\"snCLD\">||\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">c\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> ==\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> '_'\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">) \u003C\u002Fspan>\u003Cspan class=\"snCLD\">||\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">c\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> ==\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> '='\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">))\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">            {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">                if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"snCLD\">!\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">prevdash\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> &amp;&amp;\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">stringBuilder\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">Length\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> &gt;\u003C\u002Fspan>\u003Cspan class=\"s0PsH\"> 0\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">))\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">                {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sFrd5\">                    stringBuilder\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">Append\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"swiDo\">'-'\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">);\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sFrd5\">                    prevdash\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"sMc8R\"> true\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">                }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">            }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            else\u003C\u002Fspan>\u003Cspan class=\"smL5M\"> if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">c\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> &gt;=\u003C\u002Fspan>\u003Cspan class=\"s0PsH\"> 128\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">            {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">                int\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> previousLength\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> stringBuilder\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">Length\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan>\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">                if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">remapToAscii\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">                {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sFrd5\">                    stringBuilder\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">Append\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">RemapInternationalCharToAscii\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">c\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">));\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">                }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">                else\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">                {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sFrd5\">                    stringBuilder\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">Append\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">c\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">);\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">                }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan>\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">                if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">previousLength\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> !=\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> stringBuilder\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">Length\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">                {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sFrd5\">                    prevdash\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"sMc8R\"> false\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">                }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">            }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan>\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">i\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> ==\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> maxlength\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">            {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">                break\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">            }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan>\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">prevdash\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> stringBuilder\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">ToString\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">().\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">Substring\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"s0PsH\">0\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">, \u003C\u002Fspan>\u003Cspan class=\"sFrd5\">stringBuilder\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">Length\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> -\u003C\u002Fspan>\u003Cspan class=\"s0PsH\"> 1\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">);\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        else\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> stringBuilder\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">ToString\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">();\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">    }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan>\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F \u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">summary\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F Remaps the international character to their equivalent ASCII characters. See\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F http:\u002F\u002Fmeta.stackexchange.com\u002Fquestions\u002F7435\u002Fnon-us-ascii-characters-dropped-from-full-profile-url\u002F7696#7696\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F \u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u002F\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">summary\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F \u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">param\u003C\u002Fspan>\u003Cspan class=\"snDo4\"> name\u003C\u002Fspan>\u003Cspan class=\"s1q82\">=\u003C\u002Fspan>\u003Cspan class=\"swiDo\">\"character\"\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\u003C\u002Fspan>\u003Cspan class=\"s1q82\">The character to remap to its ASCII equivalent.\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u002F\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">param\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"s1q82\">    \u002F\u002F\u002F \u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">returns\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\u003C\u002Fspan>\u003Cspan class=\"s1q82\">The remapped character\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&lt;\u002F\u003C\u002Fspan>\u003Cspan class=\"sjbfc\">returns\u003C\u002Fspan>\u003Cspan class=\"sOBmp\">&gt;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">    private\u003C\u002Fspan>\u003Cspan class=\"sJvqV\"> static\u003C\u002Fspan>\u003Cspan class=\"sJvqV\"> string\u003C\u002Fspan>\u003Cspan class=\"sWm5y\"> RemapInternationalCharToAscii\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sJvqV\">char\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> character\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">    {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">        string\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> s\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> character\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">ToString\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">().\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">ToLowerInvariant\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">();\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"swiDo\">\"àåáâäãåąā\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">Contains\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">s\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">))\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> \"a\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        else\u003C\u002Fspan>\u003Cspan class=\"smL5M\"> if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"swiDo\">\"èéêëę\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">Contains\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">s\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">))\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> \"e\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        else\u003C\u002Fspan>\u003Cspan class=\"smL5M\"> if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"swiDo\">\"ìíîïı\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">Contains\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">s\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">))\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> \"i\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        else\u003C\u002Fspan>\u003Cspan class=\"smL5M\"> if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"swiDo\">\"òóôõöøőð\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">Contains\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">s\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">))\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> \"o\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        else\u003C\u002Fspan>\u003Cspan class=\"smL5M\"> if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"swiDo\">\"ùúûüŭů\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">Contains\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">s\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">))\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> \"u\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        else\u003C\u002Fspan>\u003Cspan class=\"smL5M\"> if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"swiDo\">\"çćčĉ\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">Contains\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">s\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">))\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> \"c\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        else\u003C\u002Fspan>\u003Cspan class=\"smL5M\"> if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"swiDo\">\"żźž\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">Contains\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">s\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">))\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> \"z\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        else\u003C\u002Fspan>\u003Cspan class=\"smL5M\"> if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"swiDo\">\"śşšŝ\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">Contains\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">s\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">))\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> \"s\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        else\u003C\u002Fspan>\u003Cspan class=\"smL5M\"> if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"swiDo\">\"ñń\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">Contains\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">s\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">))\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> \"n\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        else\u003C\u002Fspan>\u003Cspan class=\"smL5M\"> if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"swiDo\">\"ýÿ\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">Contains\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">s\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">))\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> \"y\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        else\u003C\u002Fspan>\u003Cspan class=\"smL5M\"> if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"swiDo\">\"ğĝ\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">Contains\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">s\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">))\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> \"g\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        else\u003C\u002Fspan>\u003Cspan class=\"smL5M\"> if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">character\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> ==\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> 'ř'\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> \"r\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        else\u003C\u002Fspan>\u003Cspan class=\"smL5M\"> if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">character\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> ==\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> 'ł'\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> \"l\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        else\u003C\u002Fspan>\u003Cspan class=\"smL5M\"> if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">character\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> ==\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> 'đ'\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> \"d\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        else\u003C\u002Fspan>\u003Cspan class=\"smL5M\"> if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">character\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> ==\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> 'ß'\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> \"ss\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        else\u003C\u002Fspan>\u003Cspan class=\"smL5M\"> if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">character\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> ==\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> 'Þ'\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> \"th\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        else\u003C\u002Fspan>\u003Cspan class=\"smL5M\"> if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">character\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> ==\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> 'ĥ'\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> \"h\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        else\u003C\u002Fspan>\u003Cspan class=\"smL5M\"> if\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> (\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">character\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> ==\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> 'ĵ'\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"swiDo\"> \"j\"\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">        else\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"smL5M\">            return\u003C\u002Fspan>\u003Cspan class=\"sJvqV\"> string\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">Empty\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">        }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">    }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">}\n\u003C\u002Fspan>\u003C\u002Fspan>",[11,155,156,157,160,161,164,165,167,168,171,172,175],{},"The difference between my version and the one in the Stack Overflow answer is that mine optionally handles non-ASCII characters using the boolean remapToAscii parameter. This parameter remaps special UTF8 characters like ",[117,158,159],{},"è"," to their ASCII equivalent ",[117,162,163],{},"e",". If there is no equivalent, then those characters are dropped. All modern browsers except Internet Explorer and Edge display the ",[117,166,159],{}," correctly. Older browsers like Internet Explorer percent encode these international characters so they are displayed as ",[117,169,170],{},"%C3%A8",". What you set this to depends on whether your target users are English speakers and if you care about supporting IE and Edge. I must say that I was hoping Edge would have added support so that ",[117,173,174],{},"remapToAscii"," could be turned off by default but I'm sorely disappointed.",[11,177,178],{},"Using the third parameter you can specify a maximum length for the title with any additional characters being dropped. Finally, the last thing to say about this method is that it has been tuned for speed.",[38,180,182,189],{"id":181},"where-can-i-get-it",[21,183,185],{"href":184,"aria-hidden":44},"#where-can-i-get-it",[46,186,187],{"xmlns":48,"xmlns:xlink":49,"viewBox":50,"version":51,"width":52,"height":52,"aria-hidden":44},[54,188],{"fill":56,"fill-rule":57,"d":58},"Where Can I Get It?",[11,191,192,193,198,199,204],{},"This is a great little snippet of code to make your URL's a human readable, while giving your site an SEO boost. It doesn't take much effort to use either. This helper class is available in the ",[21,194,197],{"href":195,"rel":196,"target":70},"https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FBoxed.AspNetCore",[67,68,69],"Boxed.AspNetCore"," NuGet package or you can look at the source code in the ",[21,200,203],{"href":201,"rel":202,"target":70},"https:\u002F\u002Fgithub.com\u002FDotnet-Boxed\u002FFramework",[67,68,69],".NET Boxed Framework"," GitHub page.",[206,207,208],"style",{},"html pre.shiki code .sjLUg, html code.shiki .sjLUg{--shiki-default:#000000;--shiki-dark:#F8F8F2}html pre.shiki code .sw29p, html code.shiki .sw29p{--shiki-default:#267F99;--shiki-default-text-decoration:inherit;--shiki-dark:#A6E22E;--shiki-dark-text-decoration:underline}html pre.shiki code .swiDo, html code.shiki .swiDo{--shiki-default:#A31515;--shiki-dark:#E6DB74}html pre.shiki code .sFrd5, html code.shiki .sFrd5{--shiki-default:#001080;--shiki-dark:#F8F8F2}html pre.shiki code .snCLD, html code.shiki .snCLD{--shiki-default:#000000;--shiki-dark:#F92672}html pre.shiki code .sJvqV, html code.shiki .sJvqV{--shiki-default:#0000FF;--shiki-dark:#F92672}html pre.shiki code .sWm5y, html code.shiki .sWm5y{--shiki-default:#795E26;--shiki-dark:#A6E22E}html pre.shiki code .s1q82, html code.shiki .s1q82{--shiki-default:#008000;--shiki-dark:#88846F}html pre.shiki code .s4J9F, html code.shiki .s4J9F{--shiki-default:#0000FF;--shiki-default-font-style:inherit;--shiki-dark:#66D9EF;--shiki-dark-font-style:italic}html pre.shiki code .sK46n, html code.shiki .sK46n{--shiki-default:#0000FF;--shiki-dark:#FD971F}html pre.shiki code .smL5M, html code.shiki .smL5M{--shiki-default:#AF00DB;--shiki-dark:#F92672}html pre.shiki code .sMc8R, html code.shiki .sMc8R{--shiki-default:#0000FF;--shiki-dark:#AE81FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sOBmp, html code.shiki .sOBmp{--shiki-default:#800000;--shiki-dark:#88846F}html pre.shiki code .sjbfc, html code.shiki .sjbfc{--shiki-default:#800000;--shiki-dark:#F92672}html pre.shiki code .snDo4, html code.shiki .snDo4{--shiki-default:#E50000;--shiki-dark:#A6E22E}html pre.shiki code .s0PsH, html code.shiki .s0PsH{--shiki-default:#098658;--shiki-dark:#AE81FF}html pre.shiki code .shFVe, html code.shiki .shFVe{--shiki-default:#EE0000;--shiki-dark:#AE81FF}",{"title":111,"searchDepth":210,"depth":210,"links":211},2,[],{"issue":213,"comments":217},{"number":214,"title":215,"html_url":216},113,"[Comment] SEO Friendly URL's for ASP.NET Core","https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F113",[218,230,238,246,254,262,270,278,286,294,302,310,318],{"id":219,"html_url":220,"body_html":221,"created_at":222,"user":223,"reactions":227},627274356,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F113#issuecomment-627274356","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fef58ad4f80aa920045a60f978d54962ce963a79dece23df722f2d54e55063246\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f38656564623562336231623166356533303766393731353637653965373035633f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Karim\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fef58ad4f80aa920045a60f978d54962ce963a79dece23df722f2d54e55063246\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f38656564623562336231623166356533303766393731353637653965373035633f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Karim\u003C\u002Fstrong> commented on \u003Cstrong>2017-01-24 12:23:27\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Unfortunately you do not explain how the routing is structured. E.g. how would an anchor tag would look like in order to call the method, how the routing in the startup file is configured.\u003C\u002Fp>","2020-05-12T11:09:38Z",{"login":224,"avatar_url":225,"html_url":226},"RehanSaeed","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F2270364?v=4","https:\u002F\u002Fgithub.com\u002FRehanSaeed",{"url":228,"total_count":229,"+1":229,"-1":229,"laugh":229,"hooray":229,"confused":229,"heart":229,"rocket":229,"eyes":229},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627274356\u002Freactions",0,{"id":231,"html_url":232,"body_html":233,"created_at":234,"user":235,"reactions":236},627274403,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F113#issuecomment-627274403","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2017-01-25 08:59:25\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Unfortunately you do not explain how the routing is structured. E.g. how would an anchor tag would look like in order to call the method, how the routing in the startup file is configured.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>The ASP.NET website has those basics covered. I assume some basic knowledge in my blog.\u003C\u002Fp>","2020-05-12T11:09:44Z",{"login":224,"avatar_url":225,"html_url":226},{"url":237,"total_count":229,"+1":229,"-1":229,"laugh":229,"hooray":229,"confused":229,"heart":229,"rocket":229,"eyes":229},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627274403\u002Freactions",{"id":239,"html_url":240,"body_html":241,"created_at":242,"user":243,"reactions":244},627274453,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F113#issuecomment-627274453","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F5889f885624cfe786404349bda514617653f9768ef46a9f4e16fbb94a3d95a3c\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f64633865616163396630373465666530396263323366306461386562643334613f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Chris\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F5889f885624cfe786404349bda514617653f9768ef46a9f4e16fbb94a3d95a3c\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f64633865616163396630373465666530396263323366306461386562643334613f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Chris\u003C\u002Fstrong> commented on \u003Cstrong>2017-02-18 12:20:47\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>This is a great article, thanks a lot!\u003C\u002Fp>","2020-05-12T11:09:51Z",{"login":224,"avatar_url":225,"html_url":226},{"url":245,"total_count":229,"+1":229,"-1":229,"laugh":229,"hooray":229,"confused":229,"heart":229,"rocket":229,"eyes":229},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627274453\u002Freactions",{"id":247,"html_url":248,"body_html":249,"created_at":250,"user":251,"reactions":252},627274500,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F113#issuecomment-627274500","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F382477acb8407171f851e8743025c684b6c107a34bda3a214be2c6f5e041c23d\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f35373033366237643464653064636335633563313636313037393833373639383f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Thomas\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F382477acb8407171f851e8743025c684b6c107a34bda3a214be2c6f5e041c23d\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f35373033366237643464653064636335633563313636313037393833373639383f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Thomas\u003C\u002Fstrong> commented on \u003Cstrong>2017-03-31 21:08:46\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Great article!\u003C\u002Fp>\n\u003Cp>But how to handle pages that is not a product (no productId) ?\u003Cbr \u002F>\nAlso, what do you think is the best approach to combine this with multi language support (localized urls)?\u003C\u002Fp>\n\u003Cp>Regards, Thomas\u003C\u002Fp>","2020-05-12T11:09:57Z",{"login":224,"avatar_url":225,"html_url":226},{"url":253,"total_count":229,"+1":229,"-1":229,"laugh":229,"hooray":229,"confused":229,"heart":229,"rocket":229,"eyes":229},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627274500\u002Freactions",{"id":255,"html_url":256,"body_html":257,"created_at":258,"user":259,"reactions":260},627274559,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F113#issuecomment-627274559","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2017-04-08 08:43:48\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Great article!\u003C\u002Fp>\n\u003Cp>But how to handle pages that is not a product (no productId) ?\u003Cbr \u002F>\nAlso, what do you think is the best approach to combine this with multi language support (localized urls)?\u003C\u002Fp>\n\u003Cp>Regards, Thomas\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Having no parameters makes no difference. For localized URL's, the culture e.g. \u003Ccode>en-GB\u003C\u002Fcode> is part of the URL, so you end up with multiple copies in Google. I think that makes sense if the page is in a different language.\u003C\u002Fp>","2020-05-12T11:10:05Z",{"login":224,"avatar_url":225,"html_url":226},{"url":261,"total_count":229,"+1":229,"-1":229,"laugh":229,"hooray":229,"confused":229,"heart":229,"rocket":229,"eyes":229},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627274559\u002Freactions",{"id":263,"html_url":264,"body_html":265,"created_at":266,"user":267,"reactions":268},627274609,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F113#issuecomment-627274609","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F6472c3b771535536a8103369140ca010d1c3b979eb282b99d010a7243c43ab1b\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f39653530303633306138663361663433303435643563363366323736306261383f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Milton\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F6472c3b771535536a8103369140ca010d1c3b979eb282b99d010a7243c43ab1b\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f39653530303633306138663361663433303435643563363366323736306261383f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Milton\u003C\u002Fstrong> commented on \u003Cstrong>2017-04-30 05:55:07\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Is possible to use this without productId, only product name? So I have to get Id to get from database, something like \u003Ccode>test.com.br\u002Fproduct\u002Fplaystation-2\u003C\u002Fcode>.\u003C\u002Fp>","2020-05-12T11:10:12Z",{"login":224,"avatar_url":225,"html_url":226},{"url":269,"total_count":229,"+1":229,"-1":229,"laugh":229,"hooray":229,"confused":229,"heart":229,"rocket":229,"eyes":229},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627274609\u002Freactions",{"id":271,"html_url":272,"body_html":273,"created_at":274,"user":275,"reactions":276},627274650,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F113#issuecomment-627274650","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2017-05-05 14:34:23\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Is possible to use this without productId, only product name? So I have to get Id to get from database, something like \u003Ccode>test.com.br\u002Fproduct\u002Fplaystation-2\u003C\u002Fcode>.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Yes, it is.\u003C\u002Fp>","2020-05-12T11:10:19Z",{"login":224,"avatar_url":225,"html_url":226},{"url":277,"total_count":229,"+1":229,"-1":229,"laugh":229,"hooray":229,"confused":229,"heart":229,"rocket":229,"eyes":229},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627274650\u002Freactions",{"id":279,"html_url":280,"body_html":281,"created_at":282,"user":283,"reactions":284},627274697,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F113#issuecomment-627274697","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fd13734fe0408b188fb159c8501b44e831ad264e2d3cbcad773eba2956d28ee0b\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f61303664353661346230656634316565636131613637383061653063323564663f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Kelsey Steele\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fd13734fe0408b188fb159c8501b44e831ad264e2d3cbcad773eba2956d28ee0b\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f61303664353661346230656634316565636131613637383061653063323564663f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Kelsey Steele\u003C\u002Fstrong> commented on \u003Cstrong>2017-11-02 20:37:13\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Unfortunately you do not explain how the routing is structured. E.g. how would an anchor tag would look like in order to call the method, how the routing in the startup file is configured.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Karim, I am having the same problem. I don't think it's that basic. I've been Googling for days but the ASP.NET website is confusing and not built for beginners. Many sources say to create a class that structures the url, but they do not say how to call the class. Any help would be greatly appreciated.\u003C\u002Fp>","2020-05-12T11:10:26Z",{"login":224,"avatar_url":225,"html_url":226},{"url":285,"total_count":229,"+1":229,"-1":229,"laugh":229,"hooray":229,"confused":229,"heart":229,"rocket":229,"eyes":229},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627274697\u002Freactions",{"id":287,"html_url":288,"body_html":289,"created_at":290,"user":291,"reactions":292},627274740,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F113#issuecomment-627274740","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F172de3d3322fa8661e97cf6af284b16359f9d580639e8e5f5eef0055122f7eb7\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f64313137653165616432363865396430323564396661626433346432646631383f733d393626643d6d6d26723d67\">\u003Cimg alt=\"medifast coupons for 2011\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F172de3d3322fa8661e97cf6af284b16359f9d580639e8e5f5eef0055122f7eb7\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f64313137653165616432363865396430323564396661626433346432646631383f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"http:\u002F\u002Fmattcutts.com\u002F\">medifast coupons for 2011\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2018-07-21 01:06:16\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Pretty! This was an extremely wonderful article. Thank you for providing these details.\u003C\u002Fp>","2020-05-12T11:10:32Z",{"login":224,"avatar_url":225,"html_url":226},{"url":293,"total_count":229,"+1":229,"-1":229,"laugh":229,"hooray":229,"confused":229,"heart":229,"rocket":229,"eyes":229},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627274740\u002Freactions",{"id":295,"html_url":296,"body_html":297,"created_at":298,"user":299,"reactions":300},627274782,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F113#issuecomment-627274782","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F5302faa4d60b1722b635ab569168b9ba0bb5dc1be2eb90198025f7fd41b189fe\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f63326134356430363334373563366230616636643330383564316438376261393f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Volkan\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F5302faa4d60b1722b635ab569168b9ba0bb5dc1be2eb90198025f7fd41b189fe\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f63326134356430363334373563366230616636643330383564316438376261393f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Volkan\u003C\u002Fstrong> commented on \u003Cstrong>2019-10-21 15:45:34\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>I think \u003Ccode>Ã°\u003C\u002Fcode> should be replaced as \u003Ccode>d\u003C\u002Fcode>.\u003C\u002Fp>","2020-05-12T11:10:39Z",{"login":224,"avatar_url":225,"html_url":226},{"url":301,"total_count":229,"+1":229,"-1":229,"laugh":229,"hooray":229,"confused":229,"heart":229,"rocket":229,"eyes":229},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627274782\u002Freactions",{"id":303,"html_url":304,"body_html":305,"created_at":306,"user":307,"reactions":308},627274839,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F113#issuecomment-627274839","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2019-11-29 17:48:16\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>I think \u003Ccode>Ã°\u003C\u002Fcode> should be replaced as \u003Ccode>d\u003C\u002Fcode>.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>The idea is to replace characters that look like the English \u003Ccode>o\u003C\u002Fcode>.\u003C\u002Fp>","2020-05-12T11:10:46Z",{"login":224,"avatar_url":225,"html_url":226},{"url":309,"total_count":229,"+1":229,"-1":229,"laugh":229,"hooray":229,"confused":229,"heart":229,"rocket":229,"eyes":229},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627274839\u002Freactions",{"id":311,"html_url":312,"body_html":313,"created_at":314,"user":315,"reactions":316},627274882,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F113#issuecomment-627274882","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F5c95cae6dae0483fa57d6dec9e758ad8c53ef8a4d66545d1a5b14937d596ff57\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f36623036313836396435313336333233623839363836313063383535626232663f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Hamzi Alsheikh\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F5c95cae6dae0483fa57d6dec9e758ad8c53ef8a4d66545d1a5b14937d596ff57\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f36623036313836396435313336333233623839363836313063383535626232663f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Fwww.hmz-software.cf\u002F\">Hamzi Alsheikh\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2020-03-09 01:42:57\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Karim, I am having the same problem. I don't think it's that basic. I've been Googling for days but the ASP.NET website is confusing and not built for beginners. Many sources say to create a class that structures the url, but they do not say how to call the class. Any help would be greatly appreciated.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Thank you, Rehan for this excellent post, I've always wanted to do this in asp.net core.\u003Cbr \u002F>\nFor anyone looking for how to map the route for this to work here is a simple example that uses the same convention that StackOverflow uses:\u003C\u002Fp>\n\u003Cdiv>\u003Cpre>\u003Cspan>mvcRoutes\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>MapRoute\u003C\u002Fspan>\u003Cspan>(\u003C\u002Fspan>\n    \u003Cspan>name\u003C\u002Fspan>\u003Cspan>:\u003C\u002Fspan> \u003Cspan>\"subcategory\"\u003C\u002Fspan>\u003Cspan>,\u003C\u002Fspan>\n    \u003Cspan>template\u003C\u002Fspan>\u003Cspan>:\u003C\u002Fspan> \u003Cspan>\"{controller}\u002F{action=Index}\u002F{id}\u002F{title?}\"\u003C\u002Fspan>\u003Cspan>,\u003C\u002Fspan> \u003Cspan>new\u003C\u002Fspan> \u003Cspan>{\u003C\u002Fspan> \u003Cspan>controller\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>\"SubCategory\"\u003C\u002Fspan>\u003Cspan>}\u003C\u002Fspan>\u003Cspan>)\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>(name the route whatever you want)\u003C\u002Fp>\n\u003Cdiv>\u003Cpre>\u003Cspan>mvcRoutes\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>MapRoute\u003C\u002Fspan>\u003Cspan>(\u003C\u002Fspan>\n    \u003Cspan>name\u003C\u002Fspan>\u003Cspan>:\u003C\u002Fspan> \u003Cspan>\"default\"\u003C\u002Fspan>\u003Cspan>,\u003C\u002Fspan>\n    \u003Cspan>template\u003C\u002Fspan>\u003Cspan>:\u003C\u002Fspan> \u003Cspan>\"{controller=Home}\u002F{action=Index}\u002F{id?}\"\u003C\u002Fspan>\u003Cspan>)\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>Notice the (action=Index) in the first route it is used to omit the action name and using the friendly name helper you get something like this: \u003Ccode>www.domain.com\u002F2\u002Fsome-product\u003C\u002Fcode>.\u003C\u002Fp>","2020-05-12T11:10:53Z",{"login":224,"avatar_url":225,"html_url":226},{"url":317,"total_count":229,"+1":229,"-1":229,"laugh":229,"hooray":229,"confused":229,"heart":229,"rocket":229,"eyes":229},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627274882\u002Freactions",{"id":319,"html_url":320,"body_html":321,"created_at":322,"user":323,"reactions":324},627274926,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F113#issuecomment-627274926","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fe6da559f9511ad53408761fd2a693d3916738578a1208a64eada855b758594f9\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f33623036383863353035623137323261333262303236316633323864623230653f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Sunny\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fe6da559f9511ad53408761fd2a693d3916738578a1208a64eada855b758594f9\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f33623036383863353035623137323261333262303236316633323864623230653f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Sunny\u003C\u002Fstrong> commented on \u003Cstrong>2020-05-01 16:06:32\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Do you have any Idea about aasp.net boilerplate? I would like to learn something like permission management, user management etc... for a multi-tenancy website.\u003C\u002Fp>","2020-05-12T11:10:59Z",{"login":224,"avatar_url":225,"html_url":226},{"url":325,"total_count":229,"+1":229,"-1":229,"laugh":229,"hooray":229,"confused":229,"heart":229,"rocket":229,"eyes":229},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627274926\u002Freactions","2016-12-17T00:00:00+00:00",null,"An SEO friendly URL is human readable and gives your site a higher page rank. Learn how to implement SEO friendly URL's using ASP.NET Core.","md",[331,333,334,335],{"depth":332,"value":59},1,{"depth":332,"value":102},{"depth":332,"value":138},{"depth":332,"value":189},"\u002Fimages\u002Fhero\u002FSearch-Engine-Optimization-SEO-1366x768.png",{},"\u002Fseo-friendly-urls-asp-net-core\u002F",true,"posts\u002F2016\u002Fseo-friendly-urls-asp-net-core\u002Findex",[342,343,344,345,346,347],".NET","ASP.NET Core","ASP.NET MVC",".NET Boxed","Friendly URL","Search Engine Optimization (SEO)",7,1792790625603]