我正在研究新的ASP.NET MVC4 Web API框架.我在Windows 8消费者预览版上运行Visual Studio 2011测试版.
我的问题是,新的Web API框架的官方示例都没有使用任何类型的数据库后端.在过去,我已经能够创建一个本地SQL CE数据库,并使用Entity Framework作为ORM通过WCF数据服务提供服务.如何使用Web API执行相同的操作?
这也是一个有效的问题吗?如果我想暴露实体框架映射的SQL CE数据库,我应该继续使用WCF数据服务吗?它似乎工作正常,除了不提供选择响应格式化程序的灵活性,我可能会得到web api.
我有一个网址
我想变成
这也可能是http://www.roadkillwiki.org/Page/my-url-with-spaces - 参数是一个字符串.我尝试过的路线设置是:
routes.MapRoute(
"ControllerDefault",
"{controller}/{id}",
new { controller = "Page", action = "Index", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
然而,这干扰了MVC项目带来的默认"id"路由.有没有办法实现这个目标?
我在MVC中使用错误处理已经困难了几天.我仍然没有做对.(我也在这里阅读了大部分问题并用Google搜索,直到我的手指流血)
我想做的事:
[Authorize]属性我不想做的事:
[ErrorHandler]我的所有控制器(它可以在我的基础控制器上使用)吗?实际上,只要我让#1-3工作,我就可以做任何必要的事情(包括NOT列表).
我尝试过的:
Application_ErrorController.HandleUnknownActionController.OnException[ErrorHandler]我的控制器CustomErrors在web.config中打开/关闭猜猜我需要这些或其他东西的组合?
我正在学习Asp.net MVC 3.只是想知道,有没有办法定义一个方法,在执行任何控制器的任何其他方法之前执行?这意味着它应该像基础"Controller"类的构造函数一样工作.
这将包括一些常见功能,如检查用户会话/如果没有登录重定向到登录页面,否则从db中设置一些将在应用程序中的任何位置使用的常用值.我只想写一次它们,不想在每个控制器方法上调用一个方法.
问候
\xe2\x80\x8b\xe2\x80\x8b 我的构建管道的一部分是下载特定版本的 Chrome (google-chrome-stable_81.0.4044.138-1_amd64.deb)。由于以下错误,我的本地构建和 GitHub 上的自动构建都突然失败:
\nStep 26/30 : RUN wget --no-verbose -O /tmp/chrome.deb http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION}_amd64.deb\n560 ---> Running in 718393c11bc4\n561http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_81.0.4044.138-1_amd64.deb:\n5622022-01-18 08:20:09 ERROR 404: Not Found.\n563The command '/bin/sh -c wget --no-verbose -O /tmp/chrome.deb http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION}_amd64.deb && apt-get update && apt-get install -y /tmp/chrome.deb --no-install-recommends --allow-downgrades fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf && rm /tmp/chrome.deb' returned a non-zero code: 8\nRun Code Online (Sandbox Code Playgroud)\n几个月来,我\xe2\x80\x99 的这部分构建一直存在零问题,但突然\xe2\x80\x99 崩溃了。知道\xe2\x80\x99s 发生了什么吗?
\n在解决这个问题的同时还有解决方法吗?
\n我有这样的模特
public string Name { get; set; }
public IEnumerable<int> ProjectMembersId { get; set; }
Run Code Online (Sandbox Code Playgroud)
应使用标准绑定代码绑定属性Name.
但属性ProjectMembersId应该使用我的自定义代码绑定.
所以我从DefaultModelBinder派生了一个类并重写了SetProperty方法.
protected override void SetProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, System.ComponentModel.PropertyDescriptor propertyDescriptor, object value)
{
if (propertyDescriptor.Name == "ProjectMembersId")
{
var list = new List<int>(5);
var form = controllerContext.HttpContext.Request.Form;
var names = form.AllKeys.Where(x => x.StartsWith("dhxGridObj"));
foreach (var name in names)
{
int i;
if (int.TryParse(form.Get(name), out i))
{
list.Add(i);
}
}
value = list;
}
base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value);
}
Run Code Online (Sandbox Code Playgroud)
芽问题是没有调用SetProperty方法,因为值提供程序不包含名为ProjectMembersId的项.
也许我正在覆盖defaultModelBinder的错误部分.那么最好的方式是什么?
有人可以帮助解释asp.net mvc中OnAuthorization和OnActionExecuting之间的区别吗?