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

代码示例是值得赞赏的,但是我对解决方案的追求远不止于确切的实现。例如,我可以轻松地将js / html / css作为字符串发送到服务器。然后为它们动态创建文件。但是那又怎样呢?

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


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

最佳答案

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


文字/ 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

10-05 20:30
查看更多