我还没有做过多少MVC,仍然在努力学习如何做事。
MVC 1和C#
问题 我想为客户提供链接,例如www.temp.com/redirects/cust100?id=123&url=www.nothere.com
从URL我知道它将转到“重定向”的控制器,但没有“cust100”的动作。我如何创建一个ActionResult(或其他东西)来获取动作,这样我就可以在数据库中查询它以检查它是否有效,然后在我的网站上重新路由它们呢?
如果我已经解释了myselft,请随时提出更多问题。
亲切的问候, 皮特
答案 0 :(得分:3)
您的路线:
routes.MapRoute("Redirects",
"{controller}/{cust}",
new {controller = "redirects", action = "Index", cust = "" });
这会使您的网址通过将参数发送到索引方法作为默认操作来实现:
/redirects/cust100?id=123&url=www.nothere.com
您的控制器方法:
public ActionResult Index(string cust, int id, string url)
{
// do some DB stuff
return RedirectResult(url);
};
答案 1 :(得分:2)
您的代码尝试查找cust100
操作的原因是您的网址与默认路由匹配:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
尝试在global.asax文件中此路由之前添加显式路由,如下所示:
routes.MapRoute(
"Redirects", // Route name
"redirects/{foo}", // URL with parameters
new { controller = "Redirect", action = "Redirect", foo = "" }
);
这会将表单/ redirects / abc123的任何网址映射到RedirectController.Redirect(string foo)
方法,并将{cnc3(或其他)作为foo
参数传入。
答案 2 :(得分:1)
您的网址格式应与Global.asax.cs
中的网址格式相同。
即
"{controller}/{action}/..."
因此,您的网址可能需要更像:
"Redirect/ToCustomer/123"
其中Redirect
是控制器,ToCustomer
是所述控制器上的操作方法,“123”是提供给操作方法的“id”参数:
public class CustomerController : Controller
{
public ActionResult ToCustomer(int id)
{
...
}
}
另一方面,为什么不在Detail
上为他们提供CustomerController
方法的网址。即:
"http://www.temp.com/Customer/Detail/123"
答案 3 :(得分:0)
您必须使用“RedirectResult”来表示重定向到新网址。
返回RedirectResult(url);
这可以解决您的问题。
以下列出的类型是ActionResult的可用派生词:
1 ContentResult - 表示文本结果
2 EmptyResult -Represent no result
3 FileResult - 表示可下载的文件(抽象类)
4 FileContentResult - 表示可下载的文件(包含二进制内容)
5 FilePathResult - 表示可下载的文件(带路径)
6 FileStreamResult - 表示可下载的文件(带有文件流)
7 HttpUnauthorizedResult - 表示未经授权的HTTP的结果 请求
8 JavaScriptResult - 表示JavaScript脚本
9 JsonResult - 表示可以的JavaScript对象表示法(JSON)结果 用于AJAX应用程序
10 RedirectResult - 表示重定向到新URL
11 RedirectToRouteResult - 表示执行重定向的结果 给出路线值字典
12 PartialViewResult -Base类用于将部分视图发送到响应
13 ViewResult -Represents HTML和markup
14 ViewResultBase -Base类用于将模型提供给视图然后呈现 对回应的看法
15 XmlResult - 将指定对象序列化为XML并输出的动作结果 它到响应流(由MvcContrib库提供)