繁体   English   中英

如何动态创建css / js / html文件并使用ASP.NET MVC在运行时提供服务

[英]How to dynamically create css/js/html files and serve back at runtime with ASP.NET MVC

好的,完美的例子:tryIt编辑器(w3schools),jsbin,jsfiddle。 我希望用户在不同的textareas中键入css / js / html,按一下魔术按钮并修饰,输出显示在iframe中。

代码示例是值得赞赏的,但是我比真正的实现更渴望获得解决方案。 例如,我可以轻松地将js / html / css作为字符串发送到服务器。 然后为它们动态创建文件。 但是那又怎样呢?

我想让这些文件仅存在于POST&GET中。 我不想重新制作jsfiddle,我想快速向用户显示他们有什么输出,而不是将其保存以供以后使用。 所以我不希望这些文件保存到内存中。 我希望将它们发送给用户,如果他们刷新页面,则该页面消失了。

  1. 创建文件(并在每次更新时删除旧文件)的想法是一个好主意吗?
  2. 是否应该全部使用JavaScript在客户端完成?
  3. 如果使用文件是正确的方法,我该如何提供文件? 我正在考虑在服务器上的临时文件夹中创建文件,然后发布链接,然后在300毫秒后发送具有唯一ID + salt的DELETE请求,如果该临时文件仍然存在,则会删除该临时文件。 但这远非理想,我可以立即想到一些问题

从技术上讲,任何服务器端操作方法都可以返回任何类型的响应。 因此,与其考虑文件,不如考虑响应类型。 即:

  • text / html的
  • 文/ CSS
  • 应用程序/ javascript(或者文本/ javascript?)

因此,您至少需要三种操作方法。 例如,按下“魔术按钮”可以重新加载框架(带有包含HTML / CSS / JS输入的POST请求):

  • 调用操作方法,该方法返回text/html ,它本身:
  • head节点中包含标准标记,这些标记引用CSS和JavaScript“文件”的路径(这些文件不是真正的文件,只是动作响应)

从操作方法返回自定义响应的一种简便方法是使用ContentResult类型:

return Content(htmlText, "text/html");

要么:

return Content(cssText, "text/css");

因此,您的服务器端代码可以例如从客户端获取CSS文本,然后像这样将其回显。 (请注意各种攻击,例如XSS。这种简单的实现可能不太理想,但是应该让您入门。)真正需要包装在任何自定义文本中的唯一方法就是HTML响应,您可以在其中进行静态定义HTML服务器端,并将用户输入的HTML放在body元素中。

因此,请大声考虑一下,如果对frame / iframe的POST请求包含三个值,那么基本的HTML服务器端操作可能类似于:

public GetHTML(string html, string css, string javascript)
{
    // temporarily store the css somewhere server-side
    // temporarily store the javascript somewhere server-side
    // build the html response from static dressing around the user-input html
    return Content(htmlString, "text/html");
}

CSS / JS存储在服务器的临时位置,可能利用会话状态或任何内置的临时存储机制。 在上述操作返回其响应之后,浏览器将从该响应中的标签请求CSS / JS操作,这些操作很简单:

public GetCSS()
{
    // if the temporary location (session?) has a css value
    //   get that value
    // else
    //   get a default, likely empty value
    return Content(cssString, "text/css");
}

// repeat for the javascript content

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM