Tag: asp.net mvc 3

在ASP.NET中使用Live Connect API检索用户的电子邮件地址

所以我是ASP.NET MVC和Windows Live Connect API的新手。 基本上我正在尝试将Live登录整合到我的网站中。 当用户登录时,Live会请求他们为我的应用程序提供某些信息的权限,将用户发送到我的应用程序设置中指定的重定向uri,并附加查询字符串。 在这里,如果用户第一次登录该站点,我希望他们的基本信息存储在我的服务器上(名字,姓氏,电子邮件)。 我已经能够获得他们的名字和姓氏,但我很难找到如何检索他们的主要电子邮件地址。 我会解释到目前为止我做了什么。 我找不到将Live connect集成到MVC应用程序的最佳方法,所以我做了最好的猜测。 我在我的重定向uri中指定了一个控制器动作,它使用查询字符串“code”来构造HTTP Post。 HttpRequest req = System.Web.HttpContext.Current.Request; string myAuthCode = req.QueryString[“code”]; string myAppId = ConfigurationManager.AppSettings.Get(“wll_appid”); string mySecret = ConfigurationManager.AppSettings.Get(“wll_secret”); string postData = “client_id=” + myAppId + “&redirect_uri=http%3A%2F%2Fmscontestplatformtest.com%2FContestPlatform%2FUser%2FSignIn&client_secret=” + mySecret + “&code=” + myAuthCode + “&grant_type=authorization_code”; byte[] byteArray = Encoding.UTF8.GetBytes(postData); WebRequest request = WebRequest.Create(“https://oauth.live.com/token”); request.ContentType […]

在ASP.NET MVC 3中GZipping内容文件

我使用以下属性来装饰我的BaseController类。 public class OutputCompressAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { string encodingsAccepted = filterContext.HttpContext.Request.Headers[“Accept-Encoding”]; if (string.IsNullOrEmpty(encodingsAccepted)) return; encodingsAccepted = encodingsAccepted.ToLowerInvariant(); HttpResponseBase response = filterContext.HttpContext.Response; if (encodingsAccepted.Contains(“gzip”)) { response.AppendHeader(“Content-encoding”, “gzip”); response.Filter = new GZipStream(response.Filter, CompressionMode.Compress); } else if (encodingsAccepted.Contains(“deflate”)) { response.AppendHeader(“Content-encoding”, “deflate”); response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress); } } } 问题是,即使这对于视图和每个操作结果都很好,该属性也不适用于项目的/Content文件夹中的/Content 。 我想知道如何使它能够使Content文件夹中的文件使用控制器,或以某种方式绑定或挂钩允许我将这些filter附加到响应头的东西。

Dictionary 使用Automapper映射到对象

下面的代码只针对这个问题 我正在上课 public User class { public string Name{get;set;} public string Age{get;set; } 我有一本字典 Dictionary data= new Dictionary(); data.Add(“Name”,”Rusi”); data.Add(“Age”,”23″); User user= new User(); 现在我想使用Automapper将User对象Automapper到此dictionary 。 Automapper映射对象的属性,但在我的例子中有一个字典和对象。 所以,请建议我怎么做

在ASP.NET MVC 3中以编程方式创建routeValues(匿名类型)

假设我们有一个页面,其中包含一些支持从DB搜索的元素,因此在Post Action中我们需要找到哪些元素是活动的,并根据这些创建路由值,如下所示: List SearchParameters = GetFilterParameters(collection); if(SearchParameters.Count > 0) foreach(Parameter item in SearchParameters) { switch(item.Name) { case “Category”: CategoryValue= item.Value; break; case “StartDate”: StartDateValue= item.Value; break; case “Product”: ProductValue= item.Value; break; } return RedirectToAction(“Index”, new {category = CategoryValue, startdate=StartDateValue, product=ProductValue }); 那么有没有办法动态定义routeValues类似于以下Pseudo-Code: var dynamicRoutValues; foreach(Parameter item in SearchParameters) { dynamicRoutValues.Add(item.Name, item.Value) } return RedirectToAction(“Index”, dynamicRoutValues);

如何更改ASP.NET MVC使用的“ReturnUrl”参数的名称?

ReturnUrl有点难看。 我想改用直接redirect 。 如何指定应与表单身份validation重定向URL一起使用的参数名称以及[Authorize]属性? 或者我是否必须创建IAuthorizationFilter实现? 🙁 例: [Authorize] public class Tools : Controller { public ActionResult Index() { return View(); } } 如果未登录的用户访问http://example.com/tools ,我希望将其重定向到http://example.com/account/logon?redirect=%2ftools ,而不是默认的http://example.com/Account/LogOn?ReturnUrl=%2ftools 对于/ account / logon部分,我可以在Global.asax中修改我的路由并进行更改 在web.config中。 但我不知道如何更改ReturnUrl参数。

ASP.Net MVC将标签值回发给控制器

当使用EditorTemplate时,如果我希望模型上的值显示在屏幕上,还要发布回控制器,我应该使用什么帮助器? 即。 如果我使用TextBoxFor: @Html.TextBoxFor(model => model.RoomTypeName) …然后用户可以修改文本… 我宁愿只显示文字,但如果我使用: @Html.DisplayTextFor(model => model.RoomTypeName) …然后不会回发给控制器。 因此,我可以显示文本的唯一方法,也是为了确保我的模型状态有效,添加第二个隐藏字段,例如: @Html.DisplayTextFor(model => model.RoomTypeName) @Html.HiddenFor(model => model.RoomTypeName) 我知道这有用,但我想知道是否有更优雅的方式 – 所以我可以显示值,并将其发回,而不需要将其复制为隐藏元素? 谢谢, 标记

在使用MVCContrib对unit testingMVC 3控制器和视图进行unit testing时,向RouteData添加键和值

好的,所以我使用MVCContrib TestHelper对我的控制器进行unit testing,效果很好。 和很多人一样,通过unit testing我真的是指这里的集成测试,我想至少确保我的视图在没有错误的情况下呈现给定模型提供…否则我会错过一大堆与模型基本相关的错误虽然我正在测试控制器(如果模型属性为null,则视图不呈现)。 无论如何,我开始试图弄清楚如何做到这一点(也就是谷歌搜索如何做到这一点)。 看起来最简单的方法是构造一个HTMLHelper并让它只渲染视图(在这种情况下是部分的)。 不幸的是,当我尝试使用我的模拟HTMLHelper时,它抱怨说路由数据中没有控制器名称。 果然,我看起来并没有填充控制器RouteData。 不幸的是,RouteData.Values RouteValueDictionary是只读的,所以我不能只提供必要的值。 我没有结合HTMLHelper的想法来解决实际渲染视图作为测试的一部分的问题,所以请随意提出替代方案,但请不要建议我使用Selenium,W​​atin或其他UI测试我的视图测试工具…我希望控件能够执行一些操作,例如操作和恢复某些测试的状态和数据信息,这是基于UI的测试无法做到的。 这是我目前用来尝试渲染部分的代码: public class FakeView : IView { #region IView Members public void Render(ViewContext viewContext, System.IO.TextWriter writer) { throw new NotImplementedException(); } #endregion } public class WebTestUtilities { public static void prepareCache() { SeedDataManager seed = new SeedDataManager(); seed.CheckSeedDataStatus(); } public static string RenderRazorViewToString(string […]

在文件上传时使用CSVHelper

我正在尝试使用CSVhelper插件来读取上传的CSV文件。 这是我的modelBinder类: public class SurveyEmailListModelsModelBinder : DefaultModelBinder { public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { var csv = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); var file = ((csv.RawValue as HttpPostedFileBase[]) ?? Enumerable.Empty()).FirstOrDefault(); if (file == null || file.ContentLength < 1) { bindingContext.ModelState.AddModelError( "", "Please select a valid CSV file" ); return null; } using (var reader = new StreamReader(file.InputStream)) […]

Mock HttpContext使用moq进行unit testing

我需要模拟HttpContext进行unit testing。 但我正在努力。 我正在创建一个方法,通过SessionIdManager以编程方式更改sessionId。 而SessionIdManager需要HttpContext而不是HttpContextBase。 但我找不到任何模拟HttpContext的例子。 那里的所有例子都只是制作HttpContextBase。 我在下面试过但是没用 HttpContext httpContext = Mock(); HttpContext httpContext = (HttpContext)GetMockHttpContextBase(); public HttpContextBase GetMockHttpContextBase() { var context = new Mock(); var request = new Mock(); var response = new Mock(); var session = new Mock(); var application = new Mock(); var httpContext = new Mock(); var server = new Mock(); […]

如何将字符串转换为linq表达式?

类似: 将字符串转换为Linq.Expressions或使用字符串作为选择器? 类似的那个: 将Linq表达式作为字符串传递? 另一个问题有相同的答案: 如何从C#中的字符串创建基于动态lambda的Linq表达式? 询问有这么多类似问题的事情的原因: 这些类似问题中接受的答案是不可接受的,因为它们都引用了4年前的一个库(授予它是由代码大师Scott Gu编写的)为旧框架(.net 3.5)编写的,并且除了链接作为答案。 有一种方法可以在代码中执行此操作,而不包括整个库。 以下是此情况的示例代码: public static void getDynamic(int startingId) where T : class { string classType = typeof(T).ToString(); string classTypeId = classType + “Id”; using (var repo = new Repository()) { Build( repo.getList(), b => b.classTypeId //doesn’t compile, this is the heart of the issue //How can […]