【问题标题】:MVC Return Content vs Return ViewMVC 返回内容与返回视图
【发布时间】:2016-06-19 19:20:55
【问题描述】:

如何封装以下代码并将其合并到我的视图中?

public ActionResult Index()
    {
        string restURL = "http://loripsum.net/api/3/medium/";
        using (var client = new WebClient())
        {
            var data = client.DownloadString(restURL);
            return Content(data, "application/json");
        }

    }

如您所见,我根本没有访问我的视图页面,而且我不确定如何将此代码插入到我拥有的视图中。我可以把它变成一个函数,然后用 return View(foo) 调用它吗?

谢谢!对不起,我已经好几年没用 mvc了

【问题讨论】:

    标签: .net json asp.net-mvc


    【解决方案1】:

    因此,如果我明白您的意思,您希望将“数据”嵌入到已有的视图中 - 因此,根据“数据”是什么,您应该创建一个具有属性的 ViewModel(只是一个标准 C# 类)在其中 - 假设数据是一个字符串,因为您将其作为字符串检索。将属性的值设置为 data,然后通过该方法返回您的 View,并传入您的新 ViewModel。

    public class MyViewModel
    {
        public string LoremContent { get; set; }
    }
    

    ...

    public ActionResult Index()
    {
        string restURL = "http://loripsum.net/api/3/medium/";
        using (var client = new WebClient())
        {
            var data = client.DownloadString(restURL);
            MyViewModel model = new MyViewModel() { LoremContent = data };
            return View(model);
        }
    }
    

    然后在您的视图中您可以参考@Model.LoremContent - 如果它是HTML,您可以使用@Html.Raw(Model.LoremContent) 来呈现它。如果您要执行此操作,请务必验证内容,否则您很容易受到脚本攻击。

    【讨论】:

    • 非常感谢 Russell,非常感谢您的帮助。
    • 嗨,Russell,请问 - 当您提到验证时,您是指绑定我的模型吗?这是您帮助我完成的最终产品。再次感谢dotnetfiddle.net/FVBCGq
    • 好吧,如果你想一想,如果你正在渲染来自第三方网站的内容,而你根本没有检查它 - 如果有人入侵了该网站或服务会怎样返回恶意脚本?您将直接通过嵌入该脚本来帮助传播该脚本,而无需对其内容进行任何检查。
    • 是的,这完全有道理。我将不得不研究如何验证第 3 方内容。你已经做的足够多了,但如果你有推荐人我可以用来了解更多关于这方面的信息,我们将不胜感激。无论如何,非常感谢您的帮助!
    • 查看owasp.org - Top10 项目是一个很好的起点。您通常不会只想将来自第三方网站的内容呈现为 html,所以我想这对于您的实时最终结果项目来说可能是学术性的。
    猜你喜欢
    • 2014-11-16
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 2010-11-15
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多