我有一个专门的案例,我希望从Controller Action提供一个直接的html文件.
我想从Views文件夹以外的其他文件夹中提供它.该文件位于
Solution\Html\index.htm
Run Code Online (Sandbox Code Playgroud)
我想从标准的控制器动作中提供服务.我可以使用返回文件吗?我该怎么做?
我经常这样做:
<div id='Product'>
@Html.Action("Create", "Product")
</div>
Run Code Online (Sandbox Code Playgroud)
它很方便,因为我可以将产品创建表单的绘图委托给另一个控制器动作以嵌入到位.但是,我遇到的问题是,该方法有时(我在什么条件下没有想到)调用我的控制器动作的[HttpPost],这当然失败了.
有没有办法强制@ Html.Action()调用GET版本?
我创建了一个新的动作过滤器(属性,类似于[Authorize]),它根据会话值授权访问控制器动作.但是,我基本上用该属性装饰我的所有控制器动作(除了极少数).
所以,我认为除了在将[ExemptFromAuthorize]属性附加到控制器动作的情况下,总是执行Action Filter会更好吗?(也许通过继承我自己的Controller类?)
我怎样才能做到这一点?
我正在寻找一种方法来强制执行控制器的操作只能通过AJAX请求访问.
在调用action方法之前执行此操作的最佳方法是什么?我想从我的动作方法重构以下内容:
if(Request.IsAjaxRequest())
// Do something
else
// return an error of some sort
Run Code Online (Sandbox Code Playgroud)
我想象的是ActionMethodSelectorAttribute可以像[AcceptVerbs]属性一样使用.我没有经验包装这样的自定义属性.
我正在使用rails_admin,我觉得它很棒.不幸的是,我无法覆盖特定模型上的特定操作.我只需要在一个模型上覆盖编辑和更新行为.任何的想法?
我有一个标准的,非异步的动作,如:
[HttpPost]
public JsonResult StartGeneratePdf(int id)
{
PdfGenerator.Current.GenerateAsync(id);
return Json(null);
}
Run Code Online (Sandbox Code Playgroud)
这个想法是我知道这个PDF生成可能需要很长时间,所以我只是启动任务并返回,而不是关心异步操作的结果.
在默认的ASP.Net MVC 4应用程序中,这给了我这个很好的例外:
System.InvalidOperationException:此时无法启动异步操作.异步操作只能在异步处理程序或模块中启动,或者在页面生命周期中的某些事件中启动.如果在执行页面时发生此异常,请确保将页面标记为<%@ Page Async ="true"%>.
哪种与我的场景无关.调查它我可以将标志设置为false以防止此异常:
<appSettings>
<!-- Allows throwaway async operations from MVC Controller actions -->
<add key="aspnet:AllowAsyncDuringSyncStages" value="true" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)
/sf/answers/1066168141/
http://msdn.microsoft.com/en-us/library/hh975440.aspx
但问题是,通过启动这个异步操作并从同步MVC控制器动作中忘记它有什么危害吗?我能找到的一切都建议让控制器异步,但这不是我想要的 - 没有意义,因为它应该总是立即返回.
asp.net asynchronous invalidoperationexception synchronous controller-action
我正在尝试保护控制器操作以防止用户访问他们无权访问的实体.我可以使用以下代码执行此操作.
public ActionResult Entity(string entityCode)
{
if (CurrentUser.VerifyEntityPermission(entityCode))
{
//populate viewModel...
return View(viewModel);
}
return RedirectToAction("NoAccessToEntity", "Error");
}
Run Code Online (Sandbox Code Playgroud)
我希望能够为控制器操作本身添加一个属性.为了验证对实体的访问,我需要查看传递给控制器的值以及用户可以访问的实体.这可能吗?
[EntityAuthRequired]
public ActionResult Entity(string entityCode)
{
//populate viewModel...
return View(viewModel);
}
Run Code Online (Sandbox Code Playgroud) c# security asp.net-mvc authorize-attribute controller-action
我们有一个控制器,它派生自这样ControllerBase的动作:
public async Task<ActionResult> Get(int id)
{
try
{
// Logic
return Ok(someReturnValue);
}
catch
{
return Problem();
}
}
Run Code Online (Sandbox Code Playgroud)
我们还有这样的单元测试:
[TestMethod]
public async Task GetCallsProblemOnInvalidId()
{
var result = sut.Get(someInvalidId);
}
Run Code Online (Sandbox Code Playgroud)
但是ControllerBase.Problem()抛出一个空引用异常。这是来自 Core MVC 框架的一个方法,所以我真的不知道它为什么会抛出错误。我认为可能是因为 HttpContext 为空,但我不确定。是否有一种标准化的方法来测试控制器应该调用的测试用例Problem()?任何帮助表示赞赏。如果答案涉及模拟:我们使用 Moq 和 AutoFixtrue。
我想设置一个自定义的嵌套控制器操作,但我无法弄清楚路由.
我一直收到以下错误
No route matches [GET] "/assets"
Run Code Online (Sandbox Code Playgroud)
的routes.rb
resources :companies do
resources :requests do
match :accept
end
end
Run Code Online (Sandbox Code Playgroud)
index.html.rb
<% @requests.each do |request| %>
<ul class="users">
<li>
<%= full_name(request.profile) %>
<%= request.status %>
<%= link_to "Accept",
:controller => "requests", :action => "accept",
:id => request.id %>
</li>
</ul>
<% end %>
Run Code Online (Sandbox Code Playgroud) 在我的 ASP.NET MVC 应用程序中,我想按顺序处理所有请求;任何动作/控制器代码都不应与另一个同时执行。如果两个请求在相似的时间进入,它应该先运行第一个,然后在第一个完成后运行第二个。
除了使用全局锁变量之外,还有更好的方法吗?
编辑:该应用程序更像是 Web 上的批处理/服务,用于执行 Web 服务调用和清理数据库。站点中不同的 URL 导致不同的批处理操作。这不是面向最终用户的站点。因此,我需要这样做,以便一次只完成一个对 URL 的请求(将执行一些批处理操作),否则,如果批处理操作的代码与其自身或其他批处理操作同时运行,则可能会损坏批处理操作. 事实上,如果另一个请求在当前正在执行时出现,它根本不应该运行,即使在前一个请求完成之后;它应该只给出一个错误信息。
我想知道是否有办法在 IIS 而不是代码中做到这一点。如果我有一个全局锁变量,它会使代码更复杂,我可能会在死锁中运行,其中锁变量设置为 true 但永远不能设置为 false。
编辑:实施计划的示例代码
[HttpPost]
public ActionResult Batch1()
{
//Config.Lock is a global static boolean variable
if(Config.Lock) { Response.Write("Error: another batch process is running"); return View(); }
Config.Lock = true;
//Run some batch calls and web services (this code cannot be interleaved with ExecuteBatchCode2() or itself)
ExecuteBatchCode();
Config.Lock = false;
return View();
}
[HttpPost]
public ActionResult Batch2()
{
if(Config.Lock) { Response.Write("Error: another …Run Code Online (Sandbox Code Playgroud) 在我的控制器的create动作中,我有以下内容:
def create
@article = Article.find(params[:id])
respond_to do |format|
if @comment.save
format.js { render 'success.js' }
else
format.js { render 'failed.js' }
end
end
end
Run Code Online (Sandbox Code Playgroud)
在我app/views/comments/failed.js.coffee,我有:
alert 'Write smth!' if $("#comments_error").length == 0
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ActionView::MissingTemplate (Missing template comments/failed,
inherited_resources/base/failed, application/failed with
{:locale=>[:en, :en],
:formats=>[:js, :html],
:handlers=>[:haml, :builder, :erb]})
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
javascript templates ruby-on-rails controller-action coffeescript
asp.net-mvc ×5
c# ×4
.net ×1
actionmethod ×1
actionresult ×1
ajax ×1
asp.net ×1
asynchronous ×1
coffeescript ×1
core ×1
html ×1
javascript ×1
rails-admin ×1
razor ×1
request ×1
security ×1
sequential ×1
synchronous ×1
templates ×1
unit-testing ×1