我读到一个字符串/单词,这样做路由崩溃但我不记得它是哪个单词/字符串组合.
例:
Microsoft Logging应用程序块和多线程 - 有效
Microsoft Logging应用程序块和多线程 - 有效
不,它不是香蕉,但它是一个单词/字符串,这样做的路由在每个使用路由系统的应用程序中崩溃.
我想我记得这是一个众所周知的问题,但我不记得我能在哪里找到它.也许我在评论中的stackoverflow上读过它.
我正在使用ASP.NET 4中的新路由功能(Web表单,而不是MVC).现在我有一个asp:ListView绑定到数据源.其中一个属性是ClientID我想用来从ListView项链接到另一个页面.在global.asax我已经定义了一个路线:
System.Web.Routing.RouteTable.Routes.MapPageRoute("ClientRoute",
"MyClientPage/{ClientID}", "~/Client.aspx");
Run Code Online (Sandbox Code Playgroud)
因此,http://server/MyClientPage/2如果存在ClientID = 2 ,则例如是有效的URL.
在ListView项目中,我有一个asp:HyperLink,以便我可以创建链接:
<asp:HyperLink ID="HyperLinkClient" runat="server"
NavigateUrl='<%# "~/MyClientPage/"+Eval("ClientID") %>' >
Go to Client details
</asp:HyperLink>
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但我更喜欢使用RouteUrl表达式来使用RouteName而不是硬编码路由.例如,使用常量ClientID = 2,我可以写:
<asp:HyperLink ID="HyperLinkClient" runat="server"
NavigateUrl="<%$ RouteUrl:ClientID=2,RouteName=ClientRoute %>" >
Go to Client details
</asp:HyperLink>
Run Code Online (Sandbox Code Playgroud)
现在我想知道我是否可以组合路由表达式语法和数据绑定语法.基本上我喜欢用2上面的常量替换<%# Eval("ClientID") %>.但是以天真的方式做到这一点......
<asp:HyperLink ID="HyperLinkClient" runat="server"
NavigateUrl='<%$ RouteUrl:ClientID=<%# Eval("ClientID") %>,RouteName=ClientRoute %>' >
Go to Client details
</asp:HyperLink>
Run Code Online (Sandbox Code Playgroud)
...不起作用:<%# Eval("ClientID") %>未评估但被视为字符串.到目前为止,使用几种引号也无济于事(大多数情况下为Parser错误).
问题:我有可能在这里实现的目标吗?如果是,那么正确的方法是什么?
先感谢您!
asp.net data-binding asp.net-routing url-routing asp.net-4.0
我想知道为什么路由似乎可以从HttpConfiguration对象和RouteTable类配置?显然,两个.Routes属性的类型不同,但它们似乎保持同步.他们有可能失去同步吗?我想知道,不过,从Web API的角度看,应该RouteTable.Routes 曾经被使用?
这是我用来设置api url的代码:
var clientUrl = '@Url.RouteUrl("ApiControllerAction", new { httproute="", controller = "Client"})';
Run Code Online (Sandbox Code Playgroud)
在我的route.config中,路由如下所示:
routes.MapHttpRoute(
name: "ApiControllerAction",
routeTemplate: "api/{controller}/{action}/{id}"
);
Run Code Online (Sandbox Code Playgroud)
我试图击中我的控制器上的动作是这样的:
[ActionName("clients")]
public IQueryable<Client> GetClients(int id)
{
return Uow.Clients.GetClients(id);
}
Run Code Online (Sandbox Code Playgroud)
我有一个javascript函数试图打这个api,但我得到一个404:
var getClients = function (id) {
return $.ajax(clientUrl + "/clients/" + id)
};
Run Code Online (Sandbox Code Playgroud)
当我调用getClients(1)时,url试图命中的是:
localhost:12345/clients/1
Run Code Online (Sandbox Code Playgroud)
而不是我期望的这个网址:
localhost:12345/api/client/clients/1
Run Code Online (Sandbox Code Playgroud)
知道这出错了吗?我让这个在另一个项目中工作,不记得我是否应该做其他事情.如果我检查javascript clientUrl =''.
javascript asp.net-routing razor asp.net-mvc-3 asp.net-web-api
TL; DR摘要:我可以为HTTP GET,PUT和DELETE配置MVC Web API路由吗?
我一直在寻找用私有API替换旧的数据访问层(基于DataSet和TableAdapter的DLL),以便在成功时创建公共API.我已经完成了MVC 4的一些工作来刷新我的前端,并喜欢使用它,因此在深入研究基于WS或WCF的库之前探索"Web API"项目类型似乎是明智的.
初始演示允许我很好地返回XML/JSON,例如:
//service.url/api/Users
...返回用户列表,而特定用户的详细信息可通过以下方式访问:
//service.url/api/Users/99
到目前为止,如此RESTful.但是,为了真正将URI映射到资源,我想将HTTP PUT(新用户)或HTTP DELETE(删除用户)映射到上面列出的URI.在我为这些项目看到的所有示例中,以及Visual Studio中提供的Scaffolds,遵循以下惯例:
//service.url/api/Users/Create
//service.url/api/Users/Delete/99
//service.url/api/Users/Update/99
... 等等.这感觉就像是把这个问题撇在了我的身上,如果将这些问题放在一起,那就太遗憾了!
有关如何最好地接近这个的任何想法?
我有一个名为"Hem"的控制器,Action名称为"Om".我设置瑞典语的默认语言.所以路线将在瑞典网站上,就是这样
/sv/Hem/Om
Run Code Online (Sandbox Code Playgroud)
现在,我想通过单击语言部分中的英语将语言更改为"en".所以路线会像这样自动设定:
/en/Home/About
Run Code Online (Sandbox Code Playgroud)
但功能应该是工作/sv/Hem/Om和在地址栏应显示为/en/Home/About
专家可以帮助我.
我正在尝试使用ASP.NET Core 2.1.0-preview1和带有Angular4客户端的ASP.NET Core SignalR 1.0.0-alpha1构建一个Web应用程序.到目前为止,我已经能够搞砸了,实际上可以在客户端内打开SignalR Web套接字连接.然而,这是有代价的,这是我的摘录Startup.cs:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
/*routes.MapSpaFallbackRoute(
name: "spa-fallback",
defaults: new { controller = "Home", action = "Index" });*/
});
app.UseWebSockets();
app.UseSignalR(routes =>
{
routes.MapHub<Feed>("feed");
});
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我不得不禁用"spa-fallback"路由,如果我不这样做,SignalR将接收纯HTML而不是JSON.当然,缺点是我必须立即输入确切的URL(localhost:12345/home/index例如),这很糟糕.
所以我的问题是,如何让MVC路由和SignalR路由并排?
cI经历了有关区域路由的各种帖子,但我仍然无法解决我的问题.
我想以有两条路线的方式拆分我的应用程序.
/Areas/Panel /Areas/Website在每个区域内都有HomeController与行动相对应的适当方法.
每当用户登陆任何1级路线时,我都希望如此:
是针对 /Areas/Website/{controller}/{action}
或者替代
至 /Areas/Panel/{controller}/{action}
我目前的MVC路线是:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(
name: "area",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
});
Run Code Online (Sandbox Code Playgroud)
但它不起作用,可能是因为我不完全理解如何告诉路由器将Website区域用作默认值.我在控制器本身之前尝试了各种指令,但它没有用.
我可以问你的意见吗?
先感谢您.
我希望MVC应用程序具有.aspx页面URL,即使没有任何物理aspx页面,我将使用Razor视图引擎.
1)是否可以定义这样的路线?
2)如果我想要一个网址,例如下面给出的网址,那条路线会是什么样子:
http://example.com/controller/action.aspx
Run Code Online (Sandbox Code Playgroud)
并且可选地
http://example.com/controller/action.aspx/id
Run Code Online (Sandbox Code Playgroud)
并且可选地
http://example.com/controller/action.aspx?queryParam1=value&queryParam2=value (等等...)
UPDATE
我意识到我想要这样的URL:
http://example.com/controller/id.aspx
Run Code Online (Sandbox Code Playgroud)
换句话说,我不希望指定具体的行动.默认操作将处理所有请求.
另一个更新
我在路由配置中指定的是:
routes.MapRoute(
name: "Default",
url: "{controller}/{id}.aspx",
defaults: new { controller = "Foo", action = "Index", id = "default" }
);
Run Code Online (Sandbox Code Playgroud)
但是,虽然上述路线适用于指定了Id的Url,如下所示:
http://example.com/foo/bar.aspx
Run Code Online (Sandbox Code Playgroud)
没有指定Id时它不起作用,例如下面的情况:
http://example.com/foo/
Run Code Online (Sandbox Code Playgroud) asp.net asp.net-mvc routing asp.net-routing asp.net-mvc-routing
我对区域路由有点困惑.我创建了一个名为Backbone的区域.我有我的默认控制器,视图和模型.
http://localhost:46870/
Run Code Online (Sandbox Code Playgroud)
给我以下错误:
Multiple types were found that match the controller named 'home'. This can happen if
the route that services this request ('{controller}/{action}/{id}') does not specify
namespaces to search for a controller that matches the request. If this is the case,
register this route by calling an overload of the 'MapRoute' method that takes a
'namespaces' parameter.
The request for 'home' has found the following matching controllers:
LearnJavascript.Areas.BackBone.Controllers.HomeController
LearnJavascript.Controllers.HomeController
Run Code Online (Sandbox Code Playgroud)
这是骨干路线(这带有脚手架,我没有做任何改动):
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"BackBone_default",
"BackBone/{controller}/{action}/{id}", …Run Code Online (Sandbox Code Playgroud) asp.net-routing ×10
asp.net ×4
asp.net-mvc ×4
c# ×3
asp.net-core ×2
razor ×2
.net-core ×1
api ×1
asp.net-4.0 ×1
data-binding ×1
javascript ×1
rest ×1
routing ×1
signalr ×1
url-routing ×1