我正在尝试在我的网页中创建一个视图,但Html.ActionLink
仅适用于Controller
,我不会尝试检索View
。
我尝试使用Html.ActionLink
并使用Controller
到Redirect
到网址,但它会重定向网页而不是更改内部View
。
<li>@Html.ActionLink("MyExtPage", "MyExtPage", "Home")</li>
public ActionResult MyExtPage() {
return Redirect("http://my.url/");
}
使用创建的View,我可以返回View,但如果我想返回外部提供的网页怎么办?如果我不需要,我真的不想使用frames
。
public ActionResult Index() {
ViewBag.Title = "Home";
return View();
}
以上是有效的,因为我有一个Index.cshtml
文件,但是如果我想将http://google.com
作为视图插入,该怎么办?
答案 0 :(得分:1)
以上是有效的,因为我有一个Index.cshtml文件,但是如果我 想要将http://google.com作为视图插入,例如?
您可以下载此远程位置的内容(例如,使用HTTP客户端,例如WebClient类),然后将其作为内容结果返回。例如:
例如,您可以编写一个自定义视图结果来执行此任务:
public class RemoteViewResult : ActionResult
{
private readonly Uri uri;
public RemoteViewResult(Uri uri)
{
this.uri = uri;
}
public override void ExecuteResult(ControllerContext context)
{
using (var client = new WebClient())
{
using (var stream = client.OpenRead(this.uri))
{
var response = context.RequestContext.HttpContext.Response;
stream.CopyTo(response.OutputStream);
response.ContentType = client.ResponseHeaders[HttpResponseHeader.ContentType];
}
}
}
}
然后:
public ActionResult Index()
{
return new RemoteViewResult(new Uri("http://www.google.com"));
}
答案 1 :(得分:1)
AFAIK你不能那样做。视图必须是您网站中的正确视图。如果您确实不想使用框架来显示外部页面内容,可以尝试使用WebRequest将Html拉回到模型/ ViewBag中,然后将其呈现给本地视图。
这有许多潜在的问题,你需要将原始html渲染到页面,这可能让你对来自外部网站的XSS攻击持开放态度。如果外部页面没有及时响应并且您从外部站点丢失了任何会话控制,它也会遇到超时,它会看到每个请求来自同一个最终用户。
答案 2 :(得分:0)
但是如果我想在视图中插入http://google.com [例如?
>该怎么办?
您可以使用<iframe />
显示它,也可以使用WebClient拉入HTML服务器端并将其写入视图。两者都没有受到鼓励。