Adding slugify parameter transform (#185)
* Adding slugify parameter transform Fixes #172 * Cleaning up code And slugifying my orders
This commit is contained in:
@@ -45,7 +45,7 @@ namespace Microsoft.eShopWeb.Web.Controllers
|
||||
public string StatusMessage { get; set; }
|
||||
|
||||
[HttpGet]
|
||||
public async Task<IActionResult> Index()
|
||||
public async Task<IActionResult> MyAccount()
|
||||
{
|
||||
var user = await _userManager.GetUserAsync(User);
|
||||
if (user == null)
|
||||
|
||||
@@ -20,8 +20,8 @@ namespace Microsoft.eShopWeb.Web.Controllers
|
||||
_orderRepository = orderRepository;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public async Task<IActionResult> Index()
|
||||
[HttpGet()]
|
||||
public async Task<IActionResult> MyOrders()
|
||||
{
|
||||
var orders = await _orderRepository.ListAsync(new CustomerOrdersWithItemsSpecification(User.Identity.Name));
|
||||
|
||||
|
||||
17
src/Web/SlugifyParameterTransformer.cs
Normal file
17
src/Web/SlugifyParameterTransformer.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using Microsoft.AspNetCore.Routing;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace Microsoft.eShopWeb.Web
|
||||
{
|
||||
|
||||
public class SlugifyParameterTransformer : IOutboundParameterTransformer
|
||||
{
|
||||
public string TransformOutbound(object value)
|
||||
{
|
||||
if (value == null) { return null; }
|
||||
|
||||
// Slugify value
|
||||
return Regex.Replace(value.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Identity.UI;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.ApplicationModels;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.eShopWeb.ApplicationCore.Interfaces;
|
||||
using Microsoft.eShopWeb.ApplicationCore.Services;
|
||||
@@ -98,7 +99,22 @@ namespace Microsoft.eShopWeb.Web
|
||||
// Add memory cache services
|
||||
services.AddMemoryCache();
|
||||
|
||||
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
|
||||
services.AddRouting(options =>
|
||||
{
|
||||
// Replace the type and the name used to refer to it with your own
|
||||
// IOutboundParameterTransformer implementation
|
||||
options.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer);
|
||||
});
|
||||
|
||||
services.AddMvc(options =>
|
||||
{
|
||||
options.Conventions.Add(new RouteTokenTransformerConvention(
|
||||
new SlugifyParameterTransformer()));
|
||||
}
|
||||
).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
|
||||
|
||||
|
||||
|
||||
services.AddSwaggerGen(c =>
|
||||
{
|
||||
c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
|
||||
@@ -163,7 +179,7 @@ namespace Microsoft.eShopWeb.Web
|
||||
{
|
||||
routes.MapRoute(
|
||||
name: "default",
|
||||
template: "{controller=Home}/{action=Index}/{id?}");
|
||||
template: "{controller:slugify=Home}/{action:slugify=Index}/{id?}");
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -18,15 +18,15 @@
|
||||
<label asp-for="Email"></label>
|
||||
@if (Model.IsEmailConfirmed)
|
||||
{
|
||||
<div class="input-group">
|
||||
<input asp-for="Email" class="form-control" />
|
||||
<span class="input-group-addon" aria-hidden="true"><span class="glyphicon glyphicon-ok text-success"></span></span>
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<input asp-for="Email" class="form-control" />
|
||||
<span class="input-group-addon" aria-hidden="true"><span class="glyphicon glyphicon-ok text-success"></span></span>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<input asp-for="Email" class="form-control" />
|
||||
<button asp-action="SendVerificationEmail" class="btn btn-link">Send verification email</button>
|
||||
<input asp-for="Email" class="form-control" />
|
||||
<button asp-action="SendVerificationEmail" class="btn btn-link">Send verification email</button>
|
||||
}
|
||||
<span asp-validation-for="Email" class="text-danger"></span>
|
||||
</div>
|
||||
@@ -1,64 +1,55 @@
|
||||
@if (Context.User.Identity.IsAuthenticated)
|
||||
@if (Context.User.Identity.IsAuthenticated)
|
||||
{
|
||||
<section class="col-lg-4 col-md-5 col-xs-12">
|
||||
<div class="esh-identity">
|
||||
<form asp-area="" asp-controller="Account" asp-action="SignOut" method="post" id="logoutForm" class="navbar-right">
|
||||
<section class="esh-identity-section">
|
||||
<section class="col-lg-4 col-md-5 col-xs-12">
|
||||
<div class="esh-identity">
|
||||
<form asp-area="" asp-controller="Account" asp-action="SignOut" method="post" id="logoutForm" class="navbar-right">
|
||||
<section class="esh-identity-section">
|
||||
@*<div class="esh-identity-name">@User.FindFirst(x => x.Type == "preferred_username").Value</div>*@
|
||||
<img class="esh-identity-image" src="~/images/arrow-down.png">
|
||||
</section>
|
||||
<section class="esh-identity-drop">
|
||||
<a class="esh-identity-item"
|
||||
asp-controller="Order"
|
||||
asp-action="MyOrders">
|
||||
<div class="esh-identity-name esh-identity-name--upper">My orders</div>
|
||||
<img class="esh-identity-image" src="~/images/my_orders.png">
|
||||
</a>
|
||||
<a class="esh-identity-item"
|
||||
asp-controller="Manage"
|
||||
asp-action="MyAccount">
|
||||
<div class="esh-identity-name esh-identity-name--upper">My account</div>
|
||||
<img class="esh-identity-image" src="~/images/my_orders.png">
|
||||
</a>
|
||||
<a class="esh-identity-item"
|
||||
href="javascript:document.getElementById('logoutForm').submit()">
|
||||
<div class="esh-identity-name esh-identity-name--upper">Log Out</div>
|
||||
<img class="esh-identity-image" src="~/images/logout.png">
|
||||
</a>
|
||||
</section>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@*<div class="esh-identity-name">@User.FindFirst(x => x.Type == "preferred_username").Value</div>*@
|
||||
<img class="esh-identity-image" src="~/images/arrow-down.png">
|
||||
</section>
|
||||
|
||||
<section class="esh-identity-drop">
|
||||
|
||||
<a class="esh-identity-item"
|
||||
asp-controller="Order"
|
||||
asp-action="Index">
|
||||
|
||||
<div class="esh-identity-name esh-identity-name--upper">My orders</div>
|
||||
<img class="esh-identity-image" src="~/images/my_orders.png">
|
||||
</a>
|
||||
|
||||
<a class="esh-identity-item"
|
||||
asp-controller="Manage"
|
||||
asp-action="Index">
|
||||
|
||||
<div class="esh-identity-name esh-identity-name--upper">My account</div>
|
||||
<img class="esh-identity-image" src="~/images/my_orders.png">
|
||||
</a>
|
||||
|
||||
<a class="esh-identity-item"
|
||||
href="javascript:document.getElementById('logoutForm').submit()">
|
||||
|
||||
<div class="esh-identity-name esh-identity-name--upper">Log Out</div>
|
||||
<img class="esh-identity-image" src="~/images/logout.png">
|
||||
</a>
|
||||
</section>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="col-lg-1 col-xs-12">
|
||||
@await Component.InvokeAsync("Basket", User.Identity.Name)
|
||||
</section>
|
||||
<section class="col-lg-1 col-xs-12">
|
||||
@await Component.InvokeAsync("Basket", User.Identity.Name)
|
||||
</section>
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
<section class="col-lg-1 col-lg-offset-3 col-md-3 col-xs-6">
|
||||
<div class="esh-identity">
|
||||
<section class="esh-identity-section">
|
||||
<div class="esh-identity-item">
|
||||
<section class="col-lg-1 col-lg-offset-3 col-md-3 col-xs-6">
|
||||
<div class="esh-identity">
|
||||
<section class="esh-identity-section">
|
||||
<div class="esh-identity-item">
|
||||
<a asp-area="" asp-controller="Account" asp-action="SignIn" class="esh-identity-name esh-identity-name--upper">
|
||||
Login
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<a asp-area="" asp-controller="Account" asp-action="SignIn" class="esh-identity-name esh-identity-name--upper">
|
||||
Login
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="col-lg-1 col-xs-12">
|
||||
@await Component.InvokeAsync("Basket")
|
||||
</section>
|
||||
<section class="col-lg-1 col-xs-12">
|
||||
@await Component.InvokeAsync("Basket")
|
||||
</section>
|
||||
}
|
||||
|
||||
@@ -76,7 +76,6 @@
|
||||
<_ContentIncludedByDefault Remove="Views\Manage\EnableAuthenticator.cshtml" />
|
||||
<_ContentIncludedByDefault Remove="Views\Manage\ExternalLogins.cshtml" />
|
||||
<_ContentIncludedByDefault Remove="Views\Manage\GenerateRecoveryCodes.cshtml" />
|
||||
<_ContentIncludedByDefault Remove="Views\Manage\Index.cshtml" />
|
||||
<_ContentIncludedByDefault Remove="Views\Manage\ResetAuthenticator.cshtml" />
|
||||
<_ContentIncludedByDefault Remove="Views\Manage\SetPassword.cshtml" />
|
||||
<_ContentIncludedByDefault Remove="Views\Manage\TwoFactorAuthentication.cshtml" />
|
||||
@@ -85,7 +84,6 @@
|
||||
<_ContentIncludedByDefault Remove="Views\Manage\_StatusMessage.cshtml" />
|
||||
<_ContentIncludedByDefault Remove="Views\Manage\_ViewImports.cshtml" />
|
||||
<_ContentIncludedByDefault Remove="Views\Order\Detail.cshtml" />
|
||||
<_ContentIncludedByDefault Remove="Views\Order\Index.cshtml" />
|
||||
<_ContentIncludedByDefault Remove="Views\Shared\Components\Basket\Default.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
@@ -139,9 +137,6 @@
|
||||
<ItemGroup>
|
||||
<UpToDateCheckInput Remove="Views\Manage\GenerateRecoveryCodes.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<UpToDateCheckInput Remove="Views\Manage\Index.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<UpToDateCheckInput Remove="Views\Manage\ResetAuthenticator.cshtml" />
|
||||
</ItemGroup>
|
||||
@@ -154,9 +149,6 @@
|
||||
<ItemGroup>
|
||||
<UpToDateCheckInput Remove="Views\Order\Detail.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<UpToDateCheckInput Remove="Views\Order\Index.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<UpToDateCheckInput Remove="Views\Shared\Components\Basket\Default.cshtml" />
|
||||
</ItemGroup>
|
||||
|
||||
Reference in New Issue
Block a user