标签: asp.net-mvc-4

我应该如何将多个参数传递给ASP.Net Web API GET?

我正在使用.Net MVC4 Web API(希望)实现RESTful api.我需要将一些参数传递给系统并让它执行一些操作,然后返回一个对象列表作为结果.具体来说,我传递了两个日期并返回它们之间的记录.我还跟踪返回的记录,以便后续调用不会在系统中重新处理.

我考虑过几种方法:

  1. 将params序列化为单个JSON字符串并在API中将其分开. http://forums.asp.net/t/1807316.aspx/1

  2. 在查询字符串中传递参数.
    将多个查询参数传递给restful api的最佳方法是什么?

  3. 定义路径中的参数:api/controller/date1/date2

  4. 使用POST本身可以让我传递一个带有params的对象.

  5. 研究ODATA,因为Web API(目前)支持它.我还没有做太多,所以我对它不是很熟悉.

似乎正确的REST实践表明何时提取数据,您应该使用GET.但是,GET也应该是无效的(不会产生副作用),我想知道我的具体实现是否违反了,因为我在API系统中标记了记录,因此我产生了副作用.

它还引出了支持变量参数的问题.如果输入参数列表发生变化,那么如果发生很多事情,必须重新定义选择3的路线将是很繁琐的.如果在运行时定义参数会发生什么......

在任何情况下,对于我的具体实现,哪个选择(如果有的话)似乎最好?

asp.net rest asp.net-mvc asp.net-mvc-4 asp.net-web-api

131
推荐指数
7
解决办法
29万
查看次数

Windows更新导致MVC3和MVC4停止工作

我是唯一一个在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,并从程序文件文件夹中删除旧版本.

有人知道如何在不爬行每个项目的情况下解决这个问题吗?

.net asp.net-mvc windows-update asp.net-mvc-3 asp.net-mvc-4

125
推荐指数
5
解决办法
5万
查看次数

防伪令牌适用于用户"",但当前用户是"用户名"

我正在构建单页面应用程序并遇到防伪令牌问题.

我知道为什么问题发生我只是不知道如何解决它.

发生以下情况时,我收到错误消息:

  1. 未登录用户加载对话框(带有生成的防伪标记)
  2. 用户关闭对话框
  3. 用户登录
  4. 用户打开相同的对话框
  5. 用户在对话框中提交表单

防伪令牌适用于用户"",但当前用户是"用户名"

发生这种情况的原因是因为我的应用程序是100%单页,并且当用户通过ajax帖子成功登录时/Account/JsonLogin,我只是使用从服务器返回的"已验证视图"切换出当前视图但不重新加载页.

我知道这就是原因,因为如果我在步骤3和4之间简单地重新加载页面,就没有错误.

所以似乎@Html.AntiForgeryToken()在加载的表单中仍然为旧用户返回一个令牌,直到重新加载页面.

如何更改@Html.AntiForgeryToken()为新的经过身份验证的用户返回令牌?

我注入了新的GenericalPrincipal带有自定义IIdentity每个Application_AuthenticateRequest这样的时候@Html.AntiForgeryToken()被调用HttpContext.Current.User.Identity,其实我与自定义标识IsAuthenticated属性设置为true,但@Html.AntiForgeryToken似乎仍然呈现为老用户令牌,除非我做一个页面重新加载.

membership-provider asp.net-mvc-4

122
推荐指数
5
解决办法
8万
查看次数

从MVC中的List <object>填充razor下拉列表

我有一个模特:

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)

c# html.dropdownlistfor razor asp.net-mvc-4

120
推荐指数
5
解决办法
32万
查看次数

在哪里可以找到用于升级到System.Web.Http v5.0.0.0的NuGet包?

刚升级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包升级到各自的最新版本:

  • ANTLRv3
  • Microsoft ASP.NET通用提供程序
  • Microsoft.Web.Infrastructure
  • Microsoft ASP.NET MVC
  • Microsoft ASP.NET Razor
  • Microsoft ASP.NET Universal Providers核心库
  • Microsoft ASP.NET通用提供程序
  • Microsoft ASP.NET Web API 2客户端
  • Microsoft ASP.NET Web API 2核心
  • Microsoft ASP.NET Web API 2 Web主机
  • Microsoft ASP.NET Web API 2
  • Microsoft ASP.NET网页
  • Microsoft.Web.Infrastructure
  • WebGrease

    通过NuGet.我没有列出相关的JavaScript库,如Micrososft.jQuery.Unobtrusive Validation等.

什么是升级System.Web.Http的NuGet包,还是我必须手动执行此操作?

.net c# nuget asp.net-mvc-4 asp.net-web-api2

120
推荐指数
2
解决办法
17万
查看次数

如何使用ApiController返回原始字符串?

我有一个提供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/">&lt;strong&gt;test&lt;/strong&gt;</string>
Run Code Online (Sandbox Code Playgroud)

有没有办法只返回纯粹的,未转义的文本,甚至没有周围的XML标签(可能是一个不同的返回类型的动作属性)?

asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api

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

如何创建ASP.NET Web API Url?

在ASP.NET MVC中,我们有@Url.Action行动.有类似的东西@Url.Api会路由到/ api/controller吗?

asp.net-mvc-4 asp.net-web-api

118
推荐指数
4
解决办法
8万
查看次数

如何"热身"实体框架?它何时变得"冷"?

不,我的第二个问题的答案不是冬天.

前言:

我最近一直在对Entity Framework进行大量的研究,而且一直困扰着我的是它在查询没有预热时的性能,所谓的冷查询.

我浏览了Entity Framework 5.0 的性能注意事项.作者介绍的概念,温暖寒冷的查询,以及他们如何不同,这我也注意到自己不知道它们的存在.在这里值得一提的是,我背后只有六个月的经验.

现在我知道如果我想在性能方面更好地理解框架,我还可以研究哪些主题.不幸的是,互联网上的大多数信息都是过时的或者是主观性的,因此我无法找到关于Warm vs Cold查询主题的任何其他信息.

基本上我到目前为止注意到的是,每当我必须重新编译或回收点击时,我的初始查询变得非常慢.正如预期的那样,任何后续数据读取都是快速的(主观的).

我们将迁移到Windows Server 2012,IIS8和SQL Server 2012,作为一名少年,我实际上赢得了在其他人之前测试它们的机会.我很高兴他们推出了一个预热模块,可以让我的应用程序为第一个请求做好准备.但是,我不确定如何继续升温我的实体框架.

我所知道的是值得做的:

  • 按照建议提前生成我的观点.
  • 最终将我的模型移动到单独的程序集中.

通过常识,我认为做的可能是错误的做法:

  • 在Application Start中执行虚拟数据读取,以便加热,生成和验证模型.

问题:

  • 什么是在我的实体框架上随时获得高可用性的最佳方法?
  • 在什么情况下实体框架再次"冷"?(重新编译,回收,IIS重启等)

asp.net asp.net-mvc entity-framework asp.net-mvc-4 entity-framework-5

118
推荐指数
3
解决办法
2万
查看次数

ASP.NET MVC 4使用权限代码自定义授权属性(无角色)

我需要在我的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

authorization custom-attributes asp.net-mvc-4

117
推荐指数
3
解决办法
14万
查看次数

获取ASP.NET MVC 4中的Checkbox值

我正在开发一个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">&nbsp;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值没有设置?

c# asp.net-mvc-4

116
推荐指数
4
解决办法
27万
查看次数