我正在开发.NET Core MVC应用程序,该应用程序要求允许使用备用控制器/动作名称。为此,我在MapRoute上使用了自己的路由器:
app.UseMvc(routes =>
{
routes.Routes.Add(new CustomRouter(routes.DefaultHandler));
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
我的自定义路由器观察到所请求的控制器和操作,并基于此将新值放入请求中的RouteData中:
public async Task RouteAsync(RouteContext context)
{
[...]
if (requestedAction == "fakeAction")
context.RouteData.Values["action"] = "realAction";
但是,要确定requestedAction
的值,我基本上是采用请求的路径,将其拆分并以这种方式获取其值。这似乎不是最佳选择。
我想做的事情看起来像这样:
var rr = new RouteBuilder(app);
var myRoute = rr.MapRoute(...).Build();
var myRouteData = myRoute.GetRouteData(context);
myRouteData["action"] == "fakeAction";
对此问题,我非常喜欢的另一种解决方法是,我可以执行以下操作:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "something",
template: "{controller=Home}/{action=Index}/{id?}");
routes.Routes.Add(new CustomRouter(routes.DefaultHandler));
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
但是我的something
路由实际上并未路由任何内容,仅用作为CustomRouter定义RouteData的一种方式。
这两种可能吗?我不喜欢我们不干净地实现现有功能的想法,因为它既有代码味道,又有潜在的维护难度。
答案 0 :(得分:0)
希望对您有所帮助
import java.util.Scanner;
public class RemoveDuplicateLetters {
public static void main(String[] args) {
Scanner scn=new Scanner(System.in);
System.out.println("enter a String:");
String s=scn.nextLine();
String ans="";
while(s.length()>0)
{
char ch = s.charAt(0);
ans+= ch;
s = s.replace(ch+"",""); //Replacing all occurrence of the current character by a spaces
}
System.out.println("after removing all duplicate letters:"+ans);
}
}