我们正在使用由多个客户共享的asp.net mvc应用程序.我们需要url包含客户端url友好名称.例如:
domain.com/clientName/controller/action/id
以下内容似乎在路由时起作用,但是对于操作链接助手没有正确生成"clientName".
_routes.MapRoute("DefaultRoute",
"{clientName}/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = string.Empty },
new { clientName = @"[\w-]+" });
Run Code Online (Sandbox Code Playgroud)
我们希望继续使用Html.ActionLink Helper方法,但它不会在生成的链接中包含clientName.我们是否必须在这种情况下编写自己的帮助者,还是有替代方法?
有没有其他人使用这种类型的路由方案构建应用程序?任何建议,将不胜感激!
我在mvc3中开发了一个多文化应用程序.我有一个包含域名列表的表(目前有2个记录):
我的应用程序动态检查您来自哪个域,然后根据域设置CurrentCultureUI.这在我的localhost上运行正常,因为我还将这些域添加到我的主机文件中,但是我不确定如何在实时环境中处理这个?(是的,我确实已经购买了两个域名)任何想法?
编辑:我已经购买了一个'.com'域名并从godaddy和另一个'.pl'域名托管来自不同的注册商(home.pl).我已将我的网站上传到godaddy,但'pl'版本不起作用.现在,当我转到我的域名mngr为'.pl'域名时,我可以选择"使用其他主机"和"DNS"和"IP"的文本框.这是我需要做的吗?我需要从godaddy获得什么?到'home.pl'域配置?
我想获得友好的网址.目前友好的网址是这样的:
本地主机/客户/ 1/namehere
我希望他们这样:
本地主机/客户/ namehere
但仍然需要id(因为我用这个id搜索我的数据库).我的可能性是什么?这甚至可能吗?
这是我的MapRoute:
context.MapRoute(
"Customer_Default",
"customer/{customername}/",
new { controller = "customer", action = "view", id = "", customername = "" }
);
Run Code Online (Sandbox Code Playgroud)
这是我链接的方式:
@Html.ActionLink(c.Bedrijfsnaam, "view", "customer", new { id = c.Klantnummer, customername = UrlEncoder.ToFriendlyUrl(c.Bedrijfsnaam) }, null)
Run Code Online (Sandbox Code Playgroud)
谢谢.
更新: 哦,如果用户更改它并不重要.我只是想让它不显示.这样用户就可以轻松地将网址更改为他们想去的地方.而且不必担心ids.(但我仍然需要它.:))
似乎MVC3具有.cshtml和.vbhtml文件扩展名的优先级处理程序,并尝试在默认文件夹中找到它们.
请求这些网址时:
MVC始终在默认文件夹中查找这些特定的静态文件.
无论扩展名或路由如何,我希望它完全忽略.cshtml和.vbhtml处理,只需像所有其他URL一样传递完整的URL,这样我就可以自己处理路由(使用Nancy).
在Azure实例上的IIS 7.5上运行MVC3 + Nancy + Razor.
web api似乎只适用于标准用例.但我想做更复杂的路由,但找不到复杂路由的文档.如果我有更多的控制器,路由变得越来越复杂.
我可以使用依赖项定义几个可选参数吗?像这样:
/api/document/{par1}/{par2}
Run Code Online (Sandbox Code Playgroud)
par1和par2应该是可选的,但par2应仅在par1存在时匹配.
并且递归参数可能吗?
/api/documents/characteristics/{round/green/red-dots}
/api/documents/characteristics/{square/yellow}
/api/documents/characteristics/{square/yellow/flat}
/api/documents/characteristics/{square/yellow/flat/...}
Run Code Online (Sandbox Code Playgroud)
是否有关于web api路由的详细文档?微软教程太基础了...我需要有关路由的更多信息.
我有两个控制器和一些麻烦,因为两个路由非常相似,所以采取了错误的路线.我可以使用[Action] -Attribute作为解决方法,但这感觉不对......我还必须考虑路由的顺序.这是合乎逻辑的,但未提及.web api只适用于简单的休息api吗?
编辑: 我试过这个:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{mandant}/documents/{id}",
defaults: new { controller = "documents", id = RouteParameter.Optional }
);
//routes.MapHttpRoute(
// name: "DefaultApiWithAction",
// routeTemplate: "api/{mandant}/documents/{id}/{action}",
// defaults: new { controller = "documents" }
// );
Run Code Online (Sandbox Code Playgroud)
我有两种方法:
[AcceptVerbs("get")]
public HttpResponseMessage Get(int id)
[ActionName("file")]
[AcceptVerbs("get")]
public HttpResponseMessage filedownload(int id)
Run Code Online (Sandbox Code Playgroud)
现在我遇到了问题,即使我注释掉第二条路线也触发了文件操作,并且由于多个动作而没有触发正常的获取特定文档方法...我尝试了[NoAction]属性但这不起作用..但是如果路由模板中没有动作,为什么会触发文件方法呢?(或者如果第二个路由处于活动状态,为什么如果url中没有动作,则不会触发正常的get-document方法....)我当前的解决方法是为所有其他方法设置default-action,但是这不是一个好的解决方案.
我在Visual Studio 2010和C#4.0中使用MVC 3.我的应用程序在IIS Express中从Visual studion正常工作,并在部署到远程生产IIS 7.5服务器时正常工作.
当我在我的开发系统上切换到使用完整的IIS 7.5服务器时,我突然开始为我的两个控制器中的操作获取HTTP 404错误.其他控制器正常运行.这是从Visual Studio运行应用程序或直接从IIS运行.
我看不到任何配置差异.
其中一个表现出这种行为的控制器是:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Configuration;
using Mbrrace.ApplicationServices.Validation;
namespace Mbrrace.WebUI.Areas.Validation.Controllers
{
public class ValidationController : Controller
{
//
// GET: /Validation/Validation/
[HttpGet]
public JsonResult PostcodeCheck([Bind(Prefix = "perinatalView")]AddressViewModel model)
{
// postcode has already been checked for correct format
// now look it up to see if it exists
if (PostcodeChecks.CheckPostcodeExists(ConfigurationManager.ConnectionStrings["CommonCodeEntities"].ConnectionString, model.Postcode))
{
return Json(true, JsonRequestBehavior.AllowGet);
}
return Json("This postcode was not …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下映射路由设置自定义路由
编辑:我的完整路线配置
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
#region FixtureAdmin
routes.MapRoute(
name: "FixtureEdit",
url: "{controller}/{action}/{id}",
defaults: new { controller = "FixtureAdmin", action = "Edit", id = UrlParameter.Optional }
);
#endregion
#region Results
routes.MapRoute(
name: "ResultAdd",
url: "{controller}/{action}/{fixtureId}",
defaults: new { controller = "Result", action = "Add", fixtureId = UrlParameter.Optional }
);
#endregion
Run Code Online (Sandbox Code Playgroud)
和我的控制器代码
public ActionResult Add(int fixtureId)
{
// return model to view etc..
}
Run Code Online (Sandbox Code Playgroud)
即使我已将参数指定为可选参数,也会出现异常. …
我有一个ASP.NET MVC4应用程序,其中包含在Global.asax.cs中定义的以下路由.应用程序的起始页面是从Home控制器的操作方法Index()返回的Index.cshtml视图.然后,我添加了一个将Default.aspx作为起始页面的旧版ASP.NET WebForms应用程序.如何将此Default.aspx页面作为此集成MVC + WebForms应用程序的起始页面:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}.mvc/{action}/{id}",
new { action = "Index", id = "" }
);
routes.MapRoute(
"Root",
"",
new { controller = "Home", action = "Index", id = "" }
);
}
Run Code Online (Sandbox Code Playgroud) 我有asp.net mvc4项目.Angularjs是一体化的.我已经按照以前的要求构建了HTML页面和WEB API 2.
现在由于某种原因,我必须使用CSHTML页面.以前我只有web api项目模板所以我不能用cshtml页面,因为只有MVC控制器可以返回部分页面(cshtml),但我只使用web apis ...
所以改变了整个项目模板,所以现在我可以拥有mvc控制器......
总之,目前我已经建立了web apis和html页面的mvc4项目.....
我只是想使用CSHTML页面而不是使用HTML页面休息的东西应该是它们......
可能吗?
我可能听起来很傻但现在需要它.帮助将不胜感激......
仅限Web apis,cshtml页面和angularjs.不是web apis,html pages和angularjs.
如果我html根据cshtml, 角度路线如何影响来替换页面?
asp.net-mvc asp.net-mvc-routing asp.net-mvc-4 asp.net-web-api angularjs
如果我希望应用程序忽略以"得分"一词开头的所有网址,那么在ASP.NET MVC应用程序中放入RouteConfig.RegisterRoutes方法的正确语法是什么
http://myserver/score*.*
?
换句话说,任何以文本"得分"开头的网址都希望我的应用忽略.
我试过了:
routes.IgnoreRoute("score*.*/{*pathInfo}");
Run Code Online (Sandbox Code Playgroud)
我也尝试了这种语法的其他几种组合,但不能完全正确.
这是我目前在RouteConfig中所拥有的内容.这几乎是标准的东西.
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Order", action = "Add", id = UrlParameter.Optional }
);
}
}
Run Code Online (Sandbox Code Playgroud)