我一直在看这篇文章的代码(在https://github.com/patelsan/WebAPIAuthentication中):http://www.codeproject.com/Articles/630986/Cross-Platform-Authentication-With-ASP- NET-Web-API.
它非常好,似乎工作正常.很少有文章解释这种令牌认证,但这是我见过的最好的.请注意,我是这项技术的新手,还有很多需要学习的地方.
所以,我注意到UsersController有这样的代码:
public class UsersController : ApiController
{
public Status Authenticate(User user)
{
. . .
}
}
Run Code Online (Sandbox Code Playgroud)
该Authenticate方法不是以已知的HTTP动词开头,例如Get或Post,并且没有与此方法关联的[HttpGet]或[HttpPost]属性,那么控制器如何知道哪个动词与此方法相关联?只需查看代码,我怎么知道我需要使用哪个动词?如果没有匹配的话,是否存在"默认"动词这样的事情?
顺便说一句,如果你想知道,唯一有效的动词是POST.我很想知道为什么会这样.
我正在查看Microsoft的以下教程.根据本教程,
在第一个示例中,"products"与名为ProductsController的控制器匹配.该请求是一个GET请求,因此框架在ProductsController上查找名称以"Get ..."开头的方法.此外,URI不包含可选的{id}段,因此框架会查找不带参数的方法.ProductsController :: GetAllProducts方法满足所有这些要求.
如果有两个方法,如GetAllProducts()和GetSoldProducts(),会发生什么?两者都没有参数.
In my Web API handler I need to get the name of the route that matched the request.
public class CurrentRequestMessageHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var route = request.GetRouteData().Route;
//now what?
return base.SendAsync(request, cancellationToken);
}
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
如何注册已在AREA中创建的控制器
我有一个问题 - 是否可以做下一个?
我有三个方面:
_Default
SiteOne
SiteTwo
Run Code Online (Sandbox Code Playgroud)
在每个区域内我都有一个名称相同的ApiController,但当然在不同的名称空间中:
MvcAppliaction.Areas._Default.Controllers.ValuesController
MvcAppliaction.Areas.SiteOne.Controllers.ValuesController
MvcAppliaction.Areas.SiteTwo.Controllers.ValuesController
Run Code Online (Sandbox Code Playgroud)
我还有一个当前值(我想使用)的配置区域.
如果他进入浏览器,我想将用户映射到适当区域(我可以在配置中找到)中的控制器:
/api/values
Run Code Online (Sandbox Code Playgroud)
例如,如果配置文件中的当前区域是SiteOne,则此请求应映射到MvcAppliaction.Areas.SiteOne.Controllers.ValuesController控制器,但如果我将配置文件中的当前区域更改为_Default的SiteTwo,则应将其映射到正确的控制器.
PS.使用MVC控制器很简单,您只需设置路线:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MvcApplication.Web.Areas." + SiteName + ".Controllers") }
);
Run Code Online (Sandbox Code Playgroud) c# asp.net-mvc-areas asp.net-web-api asp.net-web-api-routing
我有一个控制器,Groups其中包含以下操作:
public GroupModel Get(int ID)
public GroupModel Post(CreateGroupModel model)
public void Put(PublicUpdateGroupModel model)
public void PutAddContacts(UpdateContactsModel model)
public void PutRemoveContacts(UpdateContactsModel model)
public void Delete(int ID)
Run Code Online (Sandbox Code Playgroud)
我想做的是使用标准的REST路由来调用标准的get,post,put,delete mehods.但拨打PutAddContacts和PutRemoveContacts如果动作名称添加到URL,例如:
获取组/ - 调用Get方法
POST组/ - 调用Post方法
PUT组/ - 调用Put方法
DELETE groups/ - 调用Delete方法
PUT groups/addcontacts - 调用PutAddContacts方法
PUT groups/removecontacts - 调用PutRemoveContacts方法
是否可以设置路由来执行此操作,或者如果我想在URL中使用操作名称,是否需要沿着RPC路由进行路由?
TL; DR摘要:我可以为HTTP GET,PUT和DELETE配置MVC Web API路由吗?
我一直在寻找用私有API替换旧的数据访问层(基于DataSet和TableAdapter的DLL),以便在成功时创建公共API.我已经完成了MVC 4的一些工作来刷新我的前端,并喜欢使用它,因此在深入研究基于WS或WCF的库之前探索"Web API"项目类型似乎是明智的.
初始演示允许我很好地返回XML/JSON,例如:
//service.url/api/Users
...返回用户列表,而特定用户的详细信息可通过以下方式访问:
//service.url/api/Users/99
到目前为止,如此RESTful.但是,为了真正将URI映射到资源,我想将HTTP PUT(新用户)或HTTP DELETE(删除用户)映射到上面列出的URI.在我为这些项目看到的所有示例中,以及Visual Studio中提供的Scaffolds,遵循以下惯例:
//service.url/api/Users/Create
//service.url/api/Users/Delete/99
//service.url/api/Users/Update/99
... 等等.这感觉就像是把这个问题撇在了我的身上,如果将这些问题放在一起,那就太遗憾了!
有关如何最好地接近这个的任何想法?
我正在使用Asp.net web api创建一个api.我有BookController两种方法的控制器:
GetBook(int id) 返回给定id和 GetBook(int userId) 它返回给定用户的所有书籍如果我打电话,localhost/book/3那么调用哪种方法是不明确的.我如何区分这两种方法?