标签: actionresult

你能在每个动作上在ASP.NET-MVC中应用ActionFilter吗?

我想在ASP.NET MVC中将ActionFilter应用到我的应用程序中的每个操作 - 在每个控制器上.

有没有办法在不将其应用于每个ActionResult方法的情况下执行此操作?

asp.net-mvc actionresult

6
推荐指数
2
解决办法
1376
查看次数

我可以从动作过滤器返回动作结果吗?

通常我在将数据提交到数据库之前在action方法中验证我的模型.

[HttpPost]
public ActionResult MyActionMethod(MyModelType model){
if (ModelState.IsValid){
   //commit changes to database...
   return View("SuccessView",model);
}
return View(model);
}
Run Code Online (Sandbox Code Playgroud)

但在一些非常罕见的情况下,我需要在提交模型时在业务层中执行一些额外的验证.如果发生验证错误,我想在业务层中引发异常并使用该异常返回带有验证错误的视图.

我正在寻找一种方法来实现它,而无需改变我的控制器中的任何代码.所以我正在寻找避免这种情况的方法:

[HttpPost]
public ActionResult MyActionMethod(MyModelType model){
if (ModelState.IsValid){
   try {
   //commit changes to database...
   } catch (ValidationException e){
      ModelState.AddModelError(...);
      return View(model);
   }
   return View("SuccessView",model);

}
return View(model);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

我正在考虑一个捕获ValidationExceptions的动作过滤器,并在常规[HandleError]过滤器启动之前返回带有验证错误的合适视图.这样的事情可能吗?

编辑:我刚刚找到解决方案(见下文),但直到48小时后我才能将此标记为正确答案...

validation asp.net-mvc actionresult action-filter

6
推荐指数
1
解决办法
3791
查看次数

MVC3 - Ajax加载图标

我想在ActionResult请求期间显示一个ajax加载图标,可能需要几秒钟才能处理.

完成此任务的最佳方法是什么?

我只想在构建验证通过后显示图标(我正在使用MVC3,EF Code First,因此验证会自动放在页面上).

在ActionResult期间可能还有进一步的验证/异常,在这种情况下会向用户显示一条消息,然后我想让加载图标再次消失.

谢谢!

ajax asp.net-mvc actionresult asp.net-mvc-3

6
推荐指数
1
解决办法
2万
查看次数

MVC等效于Page_Load

我有一个在我的MVC应用程序中设置的会话变量.每当该会话到期并且用户尝试刷新它们所在的页面时,该页面将抛出错误,因为该会话不再设置.

在加载视图之前,我是否可以检查会话是否已设置?也许把东西放在Global.asax文件中?

我可以在每个ActionResult的开头做这样的事情.

public ActionResult ViewRecord()
{
    if (MyClass.SessionName == null)
    {
        return View("Home");
    }
    else
    {
        //do something with the session variable
    }
}
Run Code Online (Sandbox Code Playgroud)

这样做还有其他选择吗?在这种情况下,最佳做法是什么?

c# asp.net-mvc visual-studio-2010 actionresult

6
推荐指数
2
解决办法
9723
查看次数

MVC - 使用C#用Json Action Result填充ViewBag

我有一个MVC网站,后面有C#代码.我正在使用一个返回Json的ActionResult.

我试图在ViewBag中放一些东西,但似乎不起作用.

代码看起来像这样 -

    public ActionResult GetStuff(string id)
    {
        ViewBag.Id = id;

        stuff = new StuffFromDatabase(id);

        return this.Json(stuff , JsonRequestBehavior.AllowGet);
    }
Run Code Online (Sandbox Code Playgroud)

"id"未出现在ViewBag.Id中.

我可以用这种方式将id放入ViewBag吗?如果没有关于我应该如何做的任何建议?谢谢!

c# asp.net-mvc actionresult viewbag

6
推荐指数
1
解决办法
1万
查看次数

如何在Url.Action()中传递多个参数

我想从Url.Action传递多个参数,这是代码中的代码

 window.location.href = "@Url.Action("ABC", "XYZ", new { @A= ViewBag.A , @B =  ViewBag.B })";
Run Code Online (Sandbox Code Playgroud)

这是我在Controller XYZ中的方法

 public ActionResult ABC(string A, string B)
 {
    // Some Code
 }
Run Code Online (Sandbox Code Playgroud)

我总是只在第一个参数中得到值,第二个总是为空.要么我,要么B先.第二个总是空的.VIEW基本上属于JavaScript功能.这是URL:http://localhost/CargoMainSite/XYZ/ABC?A=1&B=2 请注意参数1和参数2之间有一些额外的文本,即"amp;" 如果我明确删除它.它工作正常,并获得适当的价值.

javascript parameters asp.net-mvc actionresult

6
推荐指数
1
解决办法
2万
查看次数

Struts 2.3-重定向与redirectAction

redirectredirectActionStruts2.3上下文之间的主要区别是什么。

我在下面看到了用于redirectredirectAction的 URL 。

我很清楚以下几点:

  • 重定向就像sendRedirect()方法。将创建新请求,以清除先前的值堆栈,并且不再提供操作(操作实例,操作错误,字段错误等)。
  • 在中redirectAction,控制跳到不同的动作(在相同或其他程序包中)
  • redirectAction 建议不要通过重定向。

但是,当我实现上述两个示例时,只需更改即可struts.xml

  • 在这两种情况下,动作均不再可用,
  • 创建新请求,
  • 生成的URL是相同的。

首先,我对Apache文档中关于以下内容的声明感到困惑 redirectAction

这比ServletRedirectResult更好,因为它不需要您将ActionMapper处理的URL模式编码到struts.xml配置文件中。这意味着您可以随时更改URL模式,并且您的应用程序仍然可以运行。强烈建议您如果要重定向到其他操作,请使用此结果,而不要使用标准重定向结果。

其次,我对两者之间的区别还不太清楚。

apache configuration redirect struts2 actionresult

5
推荐指数
1
解决办法
7928
查看次数

如何将 System.Net.Http.HttpResponseMessage 转换为 System.Web.Mvc.ActionResult

我正在编写简单的代理应用程序,它获取“URL 地址”,如“/xController/xMethod”,并通过 HttpClient 从另一个 Web 应用程序获取结果并显示结果。

我的方法:

public ActionResult Index(string urlAddress)
{
   var data = "";
   if (Request.ContentLength > 0 && httpRequestMessage != null)
       data = httpRequestMessage.Content.ReadAsStringAsync().Result;

    using (var client = new HttpClient())
    {
      // fill header and set target site url 

      // Make Post Data
      var buffer = System.Text.Encoding.UTF8.GetBytes(data);
      var byteContent = new ByteArrayContent(buffer);
      if (!String.IsNullOrWhiteSpace(Request.ContentType) && !String.IsNullOrEmpty(Request.ContentType))
           byteContent.Headers.ContentType = new MediaTypeWithQualityHeaderValue(Request.ContentType);

       // make query string ....

       // sending request to target site         
       HttpResponseMessage response = null;
       if (Request.HttpMethod.ToUpper() …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc httpclient actionresult httpresponsemessage

5
推荐指数
1
解决办法
3939
查看次数

C# 异步任务 <IActionResult> 返回对象

我正在尝试使用 IActionResult 接口来抛出特定的异常。但此刻我被困在控制器上。我编写了以下代码来获取单个调用:

    [Route("singlecall")]
    [HttpGet]
    [ProducesResponseType(200, Type = typeof(Models.CallModel))]
    [ProducesResponseType(404)]
    public async Task<IActionResult> GetSingleCall([FromQuery]string callId, [FromQuery] string token)
    {

        CallModel singleCall = await CustomerPortalBC.CallManagementBusiness.CallService.GetSingleCall(new Guid(callId), new Guid(token));

        if (singleCall == null){
            return NotFound();
        }

        return singleCall;
    }
Run Code Online (Sandbox Code Playgroud)

这将(显然)不起作用,因为我不能只返回 singleCall 对象。它需要一个 Microsoft.AspNetCore.Mvc.IActionResult。所以我确切地知道问题是什么,我只是不知道如何解决它。

任何见解或帮助将不胜感激!

c# asp.net actionresult

5
推荐指数
1
解决办法
5510
查看次数

如何与异步 foreach 和 IAsyncEnumerable 一起返回 ActionResult

我有这个签名的控制器方法:

public async IAsyncEnumerable<MyDto> Get()
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我需要做一些请求验证并相应地返回 401、400 和其他代码,但它不支持。或者,以下签名不会编译:

public async Task<ActionResult<IAsyncEnumerable<MyDto>>> Get()
Run Code Online (Sandbox Code Playgroud)

错误:

无法将类型“Microsoft.AspNetCore.Mvc.UnauthorizedResult”隐式转换为“MyApi.Responses.MyDto”

完整方法:

public async IAsyncEnumerable<MyDto> Get()
{
    if (IsRequestInvalid())
    {
        // Can't do the following. Does not compile.
        yield return Unauthorized();
    }
    var retrievedDtos = _someService.GetAllDtosAsync(_userId);

    await foreach (var currentDto in retrievedDtos)
    {
        yield return currentDto;
    }
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?似乎无法相信微软的设计目的IAsyncEnumerable是在没有返回任何其他东西的可能性/灵活性的情况下使用。

c# actionresult request-validation asp.net-core-webapi iasyncenumerable

5
推荐指数
1
解决办法
948
查看次数