我已经观看并查看了许多关于保护asp.net web api的页面 - 包括:http://weblogs.asp.net/jgalloway/archive/2012/03/23/asp-net-web-api-screencast-series -part-6-authorization.aspx和http://weblogs.asp.net/jgalloway/archive/2012/05/04/asp-net-mvc-authentication-customizing-authentication-and-authorization-the-right-way .aspx - 但是,我还没有看过KISS类型的例子.
如果我有一个web api,它返回一个汽车列表例如 - 我正在与第三方(即不是我自己的网站或服务器/域)合作,他们想要查询(获取)和插入(发布)列表汽车的类型,进入我的数据库,我如何验证它们(通过https)?
他们只是添加(在他们的JSON GET/Post中)类似于:
[
{"username":"someusername","password":"somepassword",
{
"carTypeID":12345,
"carTypeID":9876}
"carTypeID":2468}
}
}
]
Run Code Online (Sandbox Code Playgroud)
然后,我可以获取用户名和密码,并检查.net中的会员数据库,"IfUserAuthenticated"继续处理其余的JSON?
或者有更好的方法吗?我听说过向标题添加细节等等 - 但是我不确定这是不是因为某种原因,或者使其复杂化.我也听说过设置令牌被发送回第三方 - 如果这是最好的方法,我给他们的指示是建立他们将使用我的API的应用程序的一面?
感谢您的任何建议/指示,
标记
这听起来像是一个愚蠢的问题,但我只是想知道我是否在任何地方错过了一个技巧.
场景是,我有一个使用Simple Memebership的Web应用程序,用户可以注册使用它(例如发票程序).
但是,他们应该只能查看/更新/删除他们自己添加到数据库/ Web应用程序的信息.
确保用户只能访问其信息的最佳方法是什么?
是为每个表添加一个用户名字段,例如:
public class Invoice
{
public int InvoiceId { get; set; }
public int CustId { get; set; }
public string UserName { get; set; }
}
public class Item
{
public int ItemId { get; set; }
public int InvoiceId { get; set; }
public string UserName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
...然后在访问数据的任何控制器中,只需在每个查询中添加用户名检查,例如:
var Inv = db.Invoices.Where(x => x.UserName = User.Identity.Name);
var Itm = db.Items.Where(y => y.UserName = User.Identity.Name);
Run Code Online (Sandbox Code Playgroud)
这就是我目前正在使用的,但想知道这是否是最佳做法?或者,如果有一种更简单的方法,我们现在进入MVC4?
最好是从 …
使用Twitter.Bootstrap.MVC4可以将"null"传递给ExampleLayoursRoute.config中的Customer控制器:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapNavigationRoute<HomeController>("Home Page", c => c.Index());
routes.MapNavigationRoute<CustomerController>("Customer", null) <-- pass null here
.AddChildRoute<CustomerController>("List", c => c.Index())
.AddChildRoute<CustomerController>("Add", c => c.Create())
;
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:对象引用未设置为NavigationRouteconfigureationExtensions.cs文件中的对象实例:
public static NamedRoute ToDefaultAction<T>(this NamedRoute route, Expression<Func<T, ActionResult>> action,string areaName) where T : IController
{
var body = action.Body as MethodCallExpression; <--- Error here
Run Code Online (Sandbox Code Playgroud)
您无法添加指向同一控制器/操作的链接:
routes.MapNavigationRoute<CustomerController>("Customer", c => c.Index())
.AddChildRoute<CustomerController>("List", c => c.Index())
Run Code Online (Sandbox Code Playgroud)
或者您收到错误:{"名为'Navigation-Customer-Index'的路径已经在路径集合中.路径名称必须是唯一的.\ r \nParameter name:name"}
到目前为止,我唯一的解决方法是在控制器中添加第二个重复的Action,并将其命名为Index2(例如):
public ActionResult Index()
{
return View(db.Customers.Where(x => x.UserName == User.Identity.Name).ToList());
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试开始使用ViewModels - 但是我遇到了这个POST无法验证的问题 - 模型中的值显示在代码下方的Watch部分中:
ModelStats.IsValid = false
我的ItemViewModel是:
public class ItemViewModel
{
public int ItemId { get; set; }
[Display(Name = "Item")]
public string ItemName { get; set; }
[Display(Name = "Description")]
public string Description { get; set; }
[Display(Name = "Price")]
public double UnitPrice { get; set; }
[Range(0.00, 100, ErrorMessage = "VAT must be a % between 0 and 100")]
public decimal VAT { get; set; }
[Required]
public string UserName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我相信这会很简单 …
我有一个在Chrome中完美运行的Web应用程序,但在IE8中,我的脚本文件出现了未定义的错误:
脚本都以正确的顺序加载(View - > Source):
我不知道从哪里开始诊断 - 任何想法?(我认为IE8相当现代).
谢谢,
标记
我正在尝试为重复的类(Offer)设置EditorTemplate - 但是,我无法让EditorTemplate显示.就好像它在EditorTemplates文件夹中找不到它一样:
我的ViewModel是:
public class CreateViewModel
{
public IList<OfferVM> Offers { get; set; }
public OfferVM Header
{
get
{
return Offers.FirstOrDefault();
}
}
}
public class OfferVM
{
public int RoomTypeId { get; set; }
public int PropertyId { get; set; }
public string RoomTypeName { get; set; }
public string Layout { get; set; }
public decimal RoomRate { get; set; }
public string Inclusions { get; set; }
public string Property { get; set; }
public …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个API - 其网站上显示的预期输出(针对第三方)是下面的JSON:
{
"api_version" : 4 ,
"hotel_ids" : [97497],
"hotels" :
[
{
"hotel_id": 97497,
"room_types":
{
"Fenway Room":
{
"url": "someurlhere",
"price": 178.50,
"room_code": "SINGLE"
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我正在使用在线工具:http://json2csharp.com/
它给了我以下课程:
public class FenwayRoom
{
public string url { get; set; }
public double price { get; set; }
public string room_code { get; set; }
}
public class RoomTypes
{
public FenwayRoom __invalid_name__Fenway Room { get; set; }
}
public class Hotel …Run Code Online (Sandbox Code Playgroud) 我想用一个DateTime属性填充一个viewmodel,还有一个类别列表.
视图模型:
public class TourCategoryVM
{
public DateTime Date { get; set; }
public List<TourCategoryList> TourCategoryList { get; set; }
}
public class TourCategoryList
{
public int TourCategoryId { get; set; }
public string TourType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
领域模型:
public class TourCategory
{
public int TourCategoryId { get; set; }
public string TourType { get; set; }
public virtual ICollection<Tour> Tour { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想我可以用这段代码轻松填充它:
var viewModel = new TourCategoryVM();
viewModel.TourCategoryList = db.TourCategories();
Run Code Online (Sandbox Code Playgroud)
但是,我收到错误:
错误1无法将类型隐式转换
System.Data.Entity.DbSet<tb.Models.TourCategory> …
我想要一份展台清单(在贸易展览会上)和参展商名单.
展台名单与参展商名单分开 - 但是,一旦注册,我希望参展商能够预订展位.
当他们选择/预订展台时 - 我希望能够在我的视图中列出展台,并展示已预订展台的相关参展商.
同样,我想在另一个视图中列出参展商,以及他们预订的展位.
所以我正在尝试建立一对一的关系(使用EF CodeFirst).
但是,当试图为Stand或Exhibitor添加控制器时,我收到以下错误:

我的模特是:
public class Stand
{
public int StandID { get; set; }
public string Description { get; set; }
public bool Booked { get; set; }
public int ExhibitorID { get; set; }
public virtual Exhibitor Exhibitor { get; set; }
}
public class Exhibitor
{
public int ExhibitorID { get; set; }
public string Company { get; set; }
public int StandID { get; set; }
public virtual …Run Code Online (Sandbox Code Playgroud) 我有一个视图,其中使用的是特定的layout.cshtml 文件,而不是主要的共享布局页面:“_LayoutExCr”
这对于控制器的 Get 部分来说很好:
//
// GET: /Exhibitor/Create
public ActionResult Create()
{
return View("Create","_LayoutExCr");
}
Run Code Online (Sandbox Code Playgroud)
这工作正常 - 并显示带有特定 _LayoutExCr“主”页面的创建视图。
但是,在我的 Create 方法的 POST 中,如果输入了错误的访问代码,我想使用 _LayoutExCr“主”页面返回相同的视图 - 但 VS2012 Express 用红色下划线:
return View(exhibitor, "_LayoutExCr");
Run Code Online (Sandbox Code Playgroud)
'System.Web.Mvc.Controller.View(string, string)' 的最佳重载方法匹配有一些无效参数
//
// POST: /Exhibitor/Create
[HttpPost]
public ActionResult Create(Exhibitor exhibitor)
{
if (ModelState.IsValid)
{
if (exhibitor.AccessCode == "myaccesscode")
{
db.Exhibitors.Add(exhibitor);
db.SaveChanges();
return RedirectToAction("Thankyou");
}
else
{
ModelState.AddModelError("", "The Access Code provided is incorrect.");
return View(exhibitor, "_LayoutExCr");
}
}
return View(exhibitor, "_LayoutExCr");
}
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何使用相同的布局页面将模型返回到视图?
谢谢你, …
asp.net-mvc ×10
asp.net ×6
c# ×4
razor ×2
automapper ×1
jquery ×1
json ×1
model ×1
security ×1