我正在使用.Net MVC4 Web API(希望)实现RESTful api.我需要将一些参数传递给系统并让它执行一些操作,然后返回一个对象列表作为结果.具体来说,我传递了两个日期并返回它们之间的记录.我还跟踪返回的记录,以便后续调用不会在系统中重新处理.
我考虑过几种方法:
将params序列化为单个JSON字符串并在API中将其分开. http://forums.asp.net/t/1807316.aspx/1
在查询字符串中传递参数.
将多个查询参数传递给restful api的最佳方法是什么?
定义路径中的参数:api/controller/date1/date2
使用POST本身可以让我传递一个带有params的对象.
研究ODATA,因为Web API(目前)支持它.我还没有做太多,所以我对它不是很熟悉.
似乎正确的REST实践表明何时提取数据,您应该使用GET.但是,GET也应该是无效的(不会产生副作用),我想知道我的具体实现是否违反了,因为我在API系统中标记了记录,因此我产生了副作用.
它还引出了支持变量参数的问题.如果输入参数列表发生变化,那么如果发生很多事情,必须重新定义选择3的路线将是很繁琐的.如果在运行时定义参数会发生什么......
在任何情况下,对于我的具体实现,哪个选择(如果有的话)似乎最好?
我是唯一一个在10月15日安装了Windows Update(8.1)的人,突然MVC由于这个警告而停止工作了吗?
警告1无法解析此引用.无法找到程序集"System.Web.Mvc,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL".检查以确保磁盘上存在程序集.如果您的代码需要此引用,则可能会出现编译错误.
似乎这个Windows更新安装了版本号为4.0.0.1的更新版本的MVC,并从程序文件文件夹中删除旧版本.
有人知道如何在不爬行每个项目的情况下解决这个问题吗?
我正在构建单页面应用程序并遇到防伪令牌问题.
我知道为什么问题发生我只是不知道如何解决它.
发生以下情况时,我收到错误消息:
防伪令牌适用于用户"",但当前用户是"用户名"
发生这种情况的原因是因为我的应用程序是100%单页,并且当用户通过ajax帖子成功登录时/Account/JsonLogin,我只是使用从服务器返回的"已验证视图"切换出当前视图但不重新加载页.
我知道这就是原因,因为如果我在步骤3和4之间简单地重新加载页面,就没有错误.
所以似乎@Html.AntiForgeryToken()在加载的表单中仍然为旧用户返回一个令牌,直到重新加载页面.
如何更改@Html.AntiForgeryToken()为新的经过身份验证的用户返回令牌?
我注入了新的GenericalPrincipal带有自定义IIdentity每个Application_AuthenticateRequest这样的时候@Html.AntiForgeryToken()被调用HttpContext.Current.User.Identity,其实我与自定义标识IsAuthenticated属性设置为true,但@Html.AntiForgeryToken似乎仍然呈现为老用户令牌,除非我做一个页面重新加载.
我有一个模特:
public class DbUserRole
{
public int UserRoleId { get; set; }
public string UserRole { get; set; }
}
public class DbUserRoles
{
public List<DbUserRole> GetRoles()
{
BugnetReports RoleDropDown = new BugnetReports();
List<DbUserRole> Roles = new List<DbUserRole>();
DataSet table = RoleDropDown.userRoleDropDown();
foreach (DataRow item in table.Tables[0].Rows)
{
DbUserRole ur = new DbUserRole();
ur.UserRole = Convert.ToString(item["UserRoleName"]);
ur.UserRoleId = Convert.ToInt32(item["UserRoleID"]);
Roles.Add(ur);
}
return Roles;
}
}
Run Code Online (Sandbox Code Playgroud)
这是加载视图的Controller:
//
// GET: /Admin/AddNewUser
public ActionResult AddNewUser()
{
DbUserRoles Roles = new DbUserRoles();
return …Run Code Online (Sandbox Code Playgroud) 刚升级ASP.NET MVC4项目以使用Unity.WebApi版本5.0.0.0,它需要System.Web.Http v 5.0.0.0,因为以下错误:
Assembly 'Unity.WebApi, Version=5.1.0.0, Culture=neutral, PublicKeyToken=43da31bc42a85347' uses 'System.Web.Http, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' which has a higher version than referenced assembly 'System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Run Code Online (Sandbox Code Playgroud)
我目前正在引用System.Web.Http v4.0但是将以下NuGet包升级到各自的最新版本:
WebGrease
通过NuGet.我没有列出相关的JavaScript库,如Micrososft.jQuery.Unobtrusive Validation等.
什么是升级System.Web.Http的NuGet包,还是我必须手动执行此操作?
我有一个提供XML/JSON的ApiController,但我希望我的一个动作可以返回纯HTML.我尝试了下面但它仍然返回XML/JSON.
public string Get()
{
return "<strong>test</strong>";
}
Run Code Online (Sandbox Code Playgroud)
这就是上面的回报:
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/"><strong>test</strong></string>
Run Code Online (Sandbox Code Playgroud)
有没有办法只返回纯粹的,未转义的文本,甚至没有周围的XML标签(可能是一个不同的返回类型的动作属性)?
在ASP.NET MVC中,我们有@Url.Action行动.有类似的东西@Url.Api会路由到/ api/controller吗?
不,我的第二个问题的答案不是冬天.
前言:
我最近一直在对Entity Framework进行大量的研究,而且一直困扰着我的是它在查询没有预热时的性能,所谓的冷查询.
我浏览了Entity Framework 5.0 的性能注意事项.作者介绍的概念,温暖和寒冷的查询,以及他们如何不同,这我也注意到自己不知道它们的存在.在这里值得一提的是,我背后只有六个月的经验.
现在我知道如果我想在性能方面更好地理解框架,我还可以研究哪些主题.不幸的是,互联网上的大多数信息都是过时的或者是主观性的,因此我无法找到关于Warm vs Cold查询主题的任何其他信息.
基本上我到目前为止注意到的是,每当我必须重新编译或回收点击时,我的初始查询变得非常慢.正如预期的那样,任何后续数据读取都是快速的(主观的).
我们将迁移到Windows Server 2012,IIS8和SQL Server 2012,作为一名少年,我实际上赢得了在其他人之前测试它们的机会.我很高兴他们推出了一个预热模块,可以让我的应用程序为第一个请求做好准备.但是,我不确定如何继续升温我的实体框架.
我所知道的是值得做的:
通过常识,我认为做的可能是错误的做法:
问题:
asp.net asp.net-mvc entity-framework asp.net-mvc-4 entity-framework-5
我需要在我的MVC 4应用程序中根据用户权限级别(没有角色,只分配给用户的CRUD操作级别的权限级别)来控制对视图的访问.
示例如下AuthorizeUser将是我的自定义属性abd我需要像下面一样使用它.
[AuthorizeUser(AccessLevels="Read Invoice, Update Invoice")]
public ActionResult UpdateInvoice(int invoiceId)
{
// some code...
return View();
}
[AuthorizeUser(AccessLevels="Create Invoice")]
public ActionResult CreateNewInvoice()
{
// some code...
return View();
}
[AuthorizeUser(AccessLevels="Delete Invoice")]
public ActionResult DeleteInvoice(int invoiceId)
{
// some code...
return View();
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?怎么样?提前致谢...
Chatura
我正在开发一个ASP.NET MVC 4应用程序.这个程序有一个基本形式.我的表单模型如下所示:
public class MyModel
{
public string Name { get; set; }
public bool Remember { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的表单中,我有以下HTML.
<input id="Name" name="Name" type="text" value="@Model.Name" />
<input id="Remember" name="Remember" type="checkbox" value="@Model.Remember" />
<label for="Remember"> Remember Me?</label>
Run Code Online (Sandbox Code Playgroud)
当我发布表单时,模型中的记住值始终为false.但是,模型中的Name属性具有值.我通过在以下设置断点来测试这个:
[HttpPost]
public ActionResult MyAction(MyModel model)
{
Console.WriteLine(model.Remember.ToString());
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚.为什么Checkbox值没有设置?