Questions tagged «asp.net-mvc-4»

ASP.NET MVC 4是用于Web应用程序的ASP.NET Model-View-Controller平台的第四个主要版本。

5
您如何调试MVC 4 API路由?
我有一个使用RESTsharp与我的MVC4 RESTful服务器通信的WP7游戏,但是我经常遇到使请求正常工作的问题,因此我想调试失败的地方。 这是一个示例,其中我的ConstructorGameController被命中,但是该Post方法未命中,我不明白为什么。 客户代码: public void JoinRandomGame() { client = new RestClient { CookieContainer = new CookieContainer(), BaseUrl = "http://localhost:21688/api/", }; client.Authenticator = GetAuth(); RestRequest request = new RestRequest(Method.POST) { RequestFormat = DataFormat.Json, Resource = "game/" }; client.PostAsync(request, (response, ds) => {}); } 服务器代码: public void Post(int id) { if …

22
剃刀视图看不到System.Web.Mvc.HtmlHelper
我正在升级到MVC4。我已按照http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253806上的说明进行操作,但在Razor视图和布局中却出现类似以下错误 'System.Web.WebPages.Html.HtmlHelper'不包含'BeginRouteForm'的定义,也没有找到接受类型为'System.Web.WebPages.Html.HtmlHelper'的第一个参数的扩展方法'BeginRouteForm'缺少using指令或程序集引用?) 我也有类似的错误: “名称“ Viewbag”在当前上下文中不存在 当我将鼠标悬停在@Html上时,我可以看到它的类型为System.Web.WebPages.Html.HtmlHelper,而不是System.Web.Mvc.HtmlHelper 不确定是否还有其他相关信息,但这就是我的位置: 我尚未将sln中的类库等更新为.net 4.5。 该项目是在VS2010中创建的,但是我正在VS2012中进行迁移 该项目将打开并在VS2012,.Net 4.0,MVC 3中运行正常 任何指针表示赞赏。 编辑: web.config中的所有引用和文件已升级为: System.Web.Mvc,版本= 4.0.0.0 System.Web.WebPages,版本= 2.0.0.0 System.Web.Helpers,版本= 2.0.0.0 System.Web.WebPages.Razor,版本= 2.0.0.0 Edit(2): 在元素的/views/web.config(如果尝试在下面的@Paul的解决方案中,则为/views/shared/web.config)中,我有自己的基本类型,该基本类型继承自System.Web。 Mvc.WebViewPage,包含库中的引用已更新为MVC4,进入定义将我带到MVC4 dll。 新版本在这方面有什么变化吗?我看不到发行说明中的​​任何相关内容。

1
简单发布到Web Api
我正在尝试获取发布请求以使用网络api。以下是我的api控制器。 public class WebsController : ApiController { [HttpPost] public void PostOne(string id) { } [HttpPost] public void PostTwo(Temp id) { } } 我已更改了webapi路由以考虑该操作。Temp模型看起来像这样。 public class Temp { public string Id { get; set; } } 我的观点看起来像这样 @using (Ajax.BeginForm(new AjaxOptions { Url = "/api/webs/postone", HttpMethod = "post" })) { <input name="id" …

9
找不到IAppBuilder的类型或名称空间(缺少使用程序集指令的指令)
我正在使用Asp.Net MVC 4应用程序,在其中使用SignalR 2.0.1,并使用Owin Startup类对其进行了映射,并且起初运行良好。 突然,当我尝试重建应用程序时,它说IAppbuilder找不到类型名称空间。 以下是我的入门班 using Microsoft.Owin; using Owin; using WhiteBoardApp; namespace WhiteBoardApp { public class Startup { public void Configuration(IAppBuilder app) { app.MapSignalR(); } } } 我也安装了Owin软件包,由于某些原因,我找不到Owin Startup类,所以我只添加了一个普通类并包含了所有需要的引用。我可以知道我在哪里犯错

2
如何在HttpRequestMessage上模拟CreateResponse <T>扩展方法
我正在使用ASP.Net MVC 4 RC的ApiController,并且正在尝试对GET方法进行单元测试。 此方法使用上的CreateResponse&lt;T&gt;方法HttpRequestMessage,但我不知道如何模拟此方法或使其正常运行。 该方法的主体包含以下内容: MediaTypeHeaderValue header = new MediaTypeHeaderValue(versionedSmartBlock.ContentType); var response = Request.CreateResponse&lt;SmartBlock&gt;( HttpStatusCode.OK, versionedSmartBlock, header); 在单元测试中,我创建一个空的HttpRequestMessage: CallsController api = new CallsController( managerMock.Object, config, adapterFactoryMock.Object); api.Request = new HttpRequestMessage( HttpMethod.Get, "http://localhost/Initiate?ern=%2B44123456789"); var response = api.Get("+44123456789", null); 但这只会生成一个InvalidOperationException: 该请求没有关联的配置对象,或者提供的配置为空。 有没有人知道如何配置,HttpRequestMessage以便该CreateResponse方法真正发挥作用?

4
登录请求验证令牌问题
我一直在经历一个开发项目的错误日志,发现下面的错误(更名为保护有罪无罪) - 提供的防伪令牌是为用户“”提供的,但当前用户为“ admin”。 要复制这个问题并不是特别困难- 在登录页面打开应用程序 登录之前,请在同一台计算机上的同一浏览器中,在登录页面上打开另一个窗口或选项卡。 在第一个窗口中登录(或者实际上在第二个窗口中,顺序无关紧要) 尝试在剩余的登录窗口中登录 堆栈跟踪为- System.Web.Mvc.HttpAntiForgeryException(0x80004005):提供的防伪令牌是给用户“”的,但当前用户是“ admin”。在System.Web.Helpers.AntiXsrf.AntiForgeryWorker.Validate(HttpContextBase httpContext)(System.Web.Helpers.AntiXsrf.TokenValidator.ValidateTokens(HttpContextBase httpContext,IIdentity身份,AntiForgeryToken sessionToken,AntiForgeryToken fieldToken)在System.Web.Helpers.AntiForgery。在System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext controllerContext,IList`1过滤器,ActionDescriptor actionDescriptor)在System.Web.Mvc.Async.AsyncControllerActionInvoker处的System.Web.Mvc.ValidateAntiForgeryTokenAttribute.OnAuthorization(AuthorizationContext filterContext)处的Validate()。 &lt;&gt; c__DisplayClass25。 登录方法签名为- [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public ActionResult Login(LoginModel model, string returnUrl) { ... } 这与Internet“ ASP.NET MVC 4 Web应用程序”模板项目中的方法签名完全相同,这表明Microsoft认为ValidateAntiForgeryToken是必要/最佳实践,或者只是在此处添加了属性,因为使用了该属性。其他地方。 显然,没有什么我可以做的来处理这个问题中这种方法没有达到它的ValidateAntiForgeryToken是预请求过滤器和到达控制器之前就阻止该请求。 我可以在提交表单之前检查用户是否通过Ajax进行了身份验证,并尝试将其重定向到他们,或者只是删除了属性。 问题是这样的-我知道令牌的设计是在用户已经针对您的站点进行身份验证时阻止来自另一个站点(CSRF)的请求,因此,将其从按定义使用的表单中删除是一个问题未经身份验证的用户? 大概在这种情况下,该属性旨在减轻为您的应用程序提供伪造登录表单的恶意行为者的影响(尽管在抛出异常时,大概是用户已经输入了将被记录的详细信息,但可能会向他们发出警报)是错的)。否则,从外部站点向表单提交不正确的凭据将导致与站点本身完全相同的结果吗?我不依靠客户端验证/卫生来清理潜在的不安全输入。 是否有其他开发人员遇到过此问题(或者我们是否有非常有创造力的用户),如果是,您如何解决/缓解它? 更新:此问题完全存在于MVC5中,现在出现错误消息“提供的防伪令牌是针对与当前用户不同的基于声明的用户”。使用默认模板和身份提供程序时。微软开发人员传播者和Troy的PluralSight研究员Adam Tuliper在登录页面上的反伪造令牌中有一个相关的问题和有趣的答案,建议您删除该令牌。

2
来自数据库的ASP.NET MVC CMS动态路由
基本上,我有一个使用ASP.NET MVC构建的CMS后端,现在我要转到前端站点,并且需要能够根据输入的路由从cms数据库加载页面。 因此,如果用户输入domain.com/students/information,则MVC将在pages表中查找是否存在一个具有与学生/信息匹配的永久链接的页面,如果是这样,它将重定向到页面控制器,然后加载该页面数据库中的数据并将其返回到视图以显示。 到目前为止,我已经尝试了一条通吃的路线,但它仅适用于两个URL段,因此/ students / information无效,但对/ students / information / fall无效。我在网上找不到有关如何完成此操作的任何内容,因此尽管我会在这里问,但是在找到并开放源代码的ASP.NET MVC cms并剖析代码之前,我会在这里问。 这是我到目前为止的路由配置,但是我觉得有更好的方法可以做到这一点。 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); // Default route to handle core pages routes.MapRoute(null,"{controller}/{action}/{id}", new { action = "Index", id = UrlParameter.Optional }, new { controller = "Index" } ); // CMS route to …

4
是否在单独的程序集中启用上下文迁移?
我有一个要运行的项目,update-database但我的模型和上下文位于单独的项目中。 如果我运行enable-migrations,则会出现此错误:在程序集“ MyProject”中未找到任何上下文类型。 大概是因为我的上下文在MyProject.MVC中。 如果我enable-migrations针对MyProject.MVC运行,则必须添加一个应用程序配置文件。我不想这样做,因为我想在许多项目中使用代码。 所以我可以enable-migrations针对MyProject运行,并以某种方式告诉它在MyProject.MVC中查找上下文吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.