我正在使用ASP.NET MVC 4作为网站.该网站管理我们小组的在线活动,并为注册用户提供在线资料,网络活动档案和教学视频的访问权限.我已经建立了一个上传和管理视频的系统,现在我需要构建Controller Actions来将视频文件发送到网页.我们正在使用VideoJS作为观众,我现在非常满意.我们需要保持文件的安全性,以便让文件位于Web服务器上的某个位置似乎对我们不起作用.
我的主要问题是将文件返回给查看器的好方法是什么?我习惯使用ActionResult和JSONResult类,但它们似乎不适合视频文件.文件可能非常大,有时甚至高达GB或更高.我看到了MVC FileResult类,FileStreamResult类和FileContentResult类.在构建时,我应该使用哪一个以及我应该考虑哪些其他考虑因素?
我感谢您的帮助.
道格
我通过以下代码发送JSON对象.控制器返回CSV格式的值,应提供promt打开或保存为CSV文件.我无法理解应该在什么代码中成功编写代码:function(result)
出口链接
Html.ActionLink("Export", "", "", null, new { @onclick = "return exportData();"})
function exportData() {
var searchViewModel = getExLogSearchModelData();
var path = getAbsolutePath("ExclusionLog", "ExportData");
$.ajax({
url: path,
cache: false,
contentType: 'application/json; charset=utf-8',
dataType: 'html',
type: 'POST',
data: JSON.stringify(searchViewModel),
success: function (result) {
},
error: function (error) {
$("#voidcontainer").html("Error");
}
});
Run Code Online (Sandbox Code Playgroud)
}
控制器ActionResult
public ActionResult ExportData(ExclusionLogSearchViewModel postSearchViewModel)
{
try
{
IEnumerable<ExclusionLogViewModel> exclusionLogData = null;
exclusionLogcData = this._workerService.GetExclusionLogData(postSearchViewModel);
return CSVFile(exclusionLogMembershipSyncData.GetStream<ExclusionLogViewModel>(), "ExclusionLogTables.Csv");
}
catch (Exception ex)
{
throw ex;
}
return null; …
Run Code Online (Sandbox Code Playgroud) 我有一个我觉得非常沉重的动作结果,所以我想知道如何优化它以便它获得更好的性能.此Web应用程序将同时由+ 100,000个用户使用.
现在我的Actionresult做了以下事情:
每次用户访问视图时,此4个函数都会触发.这就是为什么我认为这个Actionresult非常糟糕.
如何将以下内容添加到我的Actionresults中?
添加计时器来检索XML文件并将xml数据填充到DB,就像每10分钟一样,因此每次用户访问视图时都不会触发.每次用户访问站点时,唯一需要触发的功能是viewmodel绑定并返回模型.我怎么能做到这一点?
注意:
这是我的行动结果:
public ActionResult Index()
{
//Get data from xml url (This is the code that shuld not run everytime a user visits the view)
var url = "http://www.interneturl.com/file.xml";
XNamespace dcM = "http://search.yahoo.com/mrss/";
var xdoc = XDocument.Load(url);
var items = xdoc.Descendants("item")
.Select(item => new
{
Title = item.Element("title").Value,
Description = item.Element("description").Value,
Link = item.Element("link").Value,
PubDate = item.Element("pubDate").Value,
MyImage = (string)item.Elements(dcM + "thumbnail")
.Where(i => i.Attribute("width").Value …
Run Code Online (Sandbox Code Playgroud) 什么是从Ajax MVC Action调用返回int的最简单方法?
我目前正在尝试:
public ContentResult Create(MyModel model)
{
return Content("1");
}
using (Ajax.BeginForm("Create",
new AjaxOptions {
OnComplete = "function(data) { alert(data); }"
}))
Run Code Online (Sandbox Code Playgroud)
我得到警报[object Object]
.我如何获得int值?或者如果可能的话直接返回int而不必使用ContentResult?
说我有以下代码,在记事本中嘲笑,所以原谅任何小错误:)
//Default page
public ActionResult Index()
{
var musicViewModel
{
Albums = GetTopSellingAlbums(5),
Genres = GetTopGenres(5),
Artists = GetTopArtists(5)
};
return View(musicViewModel);
}
[HttpPost]
public ActionResult Index(MusicViewModel musicViewModel)
{
//For the example, pretend I have a class called musicStoreSubmission in my
//viewmodel which holds a few different fields the user fills out.
if(ModelState.IsValid)
{
//Do some actions based on the user submitting a form
}
//Else, refresh page with errors in Modelstate.
var musicViewModel
{
Albums = GetTopSellingAlbums(5),
Genres = …
Run Code Online (Sandbox Code Playgroud) 将应用程序从Struts 1迁移到Struts 2时
在某些地方,根据请求参数,相同的动作类已用于不同类型的视图.
例如:如果createType
1表示需要附加一个参数,或者createType
2表示需要追加一些额外的参数,就像我需要将动态参数传递给其他一些动作一样ActionForward
.
struts-config.xml中
<action path="/CommonAction" type="com.example.CommonAction" scope="request">
<forward name="viewAction" path = "/ViewAction.do"/>
</action>
Run Code Online (Sandbox Code Playgroud)
行动类
public class CreateAction extends Action
{
public ActionForward execute(ActionMapping m, ActionForm f, HttpServletRequest req, HttpServletResponse res) throws ServletException, Exception
{
String actionPath = m.findForward("viewAction").getPath();
String createType = req.getParameter("createType");
String params = "&action=view";
if("1".equals(createType)){
params = params + "&from=list";
}else if("2".equals(createType)){
params = params + "&from=detail&someParam=someValue";
}//,etc..
String actionUrl = actionPath+"?"+params;
return new ActionForward(actionUrl);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法在Struts 2中做同样的事情.在Struts …
我想保存通知TempData
并显示给用户。我为此创建了扩展方法,并实现了一个从扩展的类ActionResult
。我需要访问TempData
的override ExecuteResult
法ActionContext
。
扩展方式:
public static IActionResult WithSuccess(this ActionResult result, string message)
{
return new AlertDecoratorResult(result, "alert-success", message);
}
Run Code Online (Sandbox Code Playgroud)
扩展ActionResult类。
public class AlertDecoratorResult : ActionResult
{
public ActionResult InnerResult { get; set; }
public string AlertClass { get; set; }
public string Message { get; set; }
public AlertDecoratorResult(ActionResult innerResult, string alertClass, string message)
{
InnerResult = innerResult;
AlertClass = alertClass;
Message = message;
}
public override void ExecuteResult(ActionContext context)
{ …
Run Code Online (Sandbox Code Playgroud) 我正在将 MVC 控制器重构为不同类中的更小的部分,并且已经到了返回“return StatusCode(500,"Some message")”项的部分。
据我所知,似乎我无法在控制器之外执行此操作。
这是可能的,还是我必须找到一种替代方法来返回响应,并将其转换为调用代码(MVC 控制器)中的适当类型?
我可以看到自己遇到的一个问题是,MVC 操作的原始类型是 IActionResult,因此在操作中我一直返回适当的响应,有时是 view(,model),有时是 Json(),有时是 StatusCode (<500>,),即我的回答不一致。
有没有一种自然的方法让我可以拾取这些代码并将其移动到另一个类中以使其工作,或者我是否必须手工制作自己的对象来表示我本来会在控制器中返回的内容,如果是这样,什么是受到推崇的?
简而言之,理想情况下,我希望能够在控制器外部的类中返回操作结果,例如“return View(”my view name”, myModel)。我怎样才能实现这一点?
感觉很脏,但也许是一个包含状态代码、消息、对象(用作模型)、视图名称和一个名为 ActionResultType 的新枚举的单个对象,其值为“StatusCode”、“Json”和“View”,因此,当控制器收到响应时,我可以相当轻松地将其映射回适当的自然状态。
也许我走得太远了,应该只专注于从控制器中获取逻辑的主要部分,而不是尝试在其他地方构建更充实的响应?
如果可能的话,我希望每个操作结果都达到大约 10 行,但除非我能找到一种好方法从其他地方返回适当的响应,否则这可能会很困难。
我有一个ActionResult,它返回嵌入式设备的XML.相关代码是:
return Content(someString, "text/xml", Encoding.UTF8);
Run Code Online (Sandbox Code Playgroud)
即使指定了UTF-8,生成的XML也是:
<?xml version="1.0" encoding="utf-16"?>
Run Code Online (Sandbox Code Playgroud)
ASP.NET MVC编译为AnyCPU并在Windows 2008服务器上运行.
为什么不返回UTF-8编码的XML?
我有一个相当大的MVC Web应用程序,我在每个控制器中重复一个操作,看看客户是否已经完成了应用程序进程(在这种情况下,我检查了他们的配置文件中的标志).理想情况下,我想从每个操作方法中删除此代码,并将其应用于返回操作结果的所有操作方法.
actionresult ×10
asp.net-mvc ×7
c# ×3
ajax ×2
asp.net ×2
.net ×1
actionlink ×1
asp.net-core ×1
controllers ×1
dry ×1
java ×1
performance ×1
struts ×1
struts2 ×1
utf-16 ×1
utf-8 ×1