Android request asp.net web API by Cooki
今天再讲一下android如何通过Cooki访问需要身份验证的web API。
web API项目中加入如下用于验证身份的Controler:
public class LogonController : ApiController{public bool Post([FromBody]User model){using (var db = new HereDbContext()){var query = db.AllUsers.Where((p) => p.Name == model.Name && p.Password == model.Password);if (query.Count() > 0){// 将客户端验证保存到Cooki中FormsAuthentication.SetAuthCookie(model.Name, false);return true;}}return false;}}
web API中存在另一个需要身份验证才能使用的API Controler,如下:
[Authorize]public class UsersController : ApiController{public IEnumerable<User> GetAllUsers(){Log.I("GetAllUsers() is called.");using (var db = new HereDbContext()){return db.AllUsers.ToList();}}public User GetUserById(int id){using (var db = new HereDbContext()){var user = db.AllUsers.FirstOrDefault((p) => p.Id == id);if (user == null){throw new HttpResponseException(HttpStatusCode.NotFound);}return user;}}public User GetUsersByUid(string uid){using (var db = new HereDbContext()){foreach (var user in db.AllUsers){if (user.UID == uid){return user;}}}throw new HttpResponseException(HttpStatusCode.NotFound);}public HttpResponseMessage AddUser([FromBody]User user){if (user == null){return Request.CreateResponse<string>(HttpStatusCode.Forbidden, "user is null!");}using (var db = new HereDbContext()){if (db.AllUsers.Where((p) => string.Equals(p.Name, user.Name)).Count() > 0){return Request.CreateResponse<string>(HttpStatusCode.Conflict, user.Name + " already existed!");}db.AllUsers.Add(user);db.SaveChanges();return Request.CreateResponse<string>(HttpStatusCode.Accepted, user.UID);}}}
如果我们想通过android客户端访问这个需要身份验证web API。我们可以通过如下方式书写客户端:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.List;import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException; import org.apache.http.client.CookieStore; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.impl.client.AbstractHttpClient; import org.apache.http.impl.client.DefaultHttpClient;import android.util.Log;public abstract class HttpHelper {private final static String TAG = "HttpHelper";private final static String API_URL = "http://your.url/api/";private static CookieStore sCookieStore;public static String invokePost(String action, List<NameValuePair> params) {try {String url = API_URL + action + "/";Log.d(TAG, "url is" + url);HttpPost httpPost = new HttpPost(url);if (params != null && params.size() > 0) {HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");httpPost.setEntity(entity);}return invoke(httpPost);} catch (Exception e) {Log.e(TAG, e.toString());}return null;}public static String invokePost(String action) {return invokePost(action, null);}public static String invokeGet(String action, List<NameValuePair> params) {try {StringBuilder sb = new StringBuilder(API_URL);sb.append(action);if (params != null) {for (NameValuePair param : params) {sb.append("?");sb.append(param.getName());sb.append("=");sb.append(param.getValue());}}Log.d(TAG, "url is" + sb.toString());HttpGet httpGet = new HttpGet(sb.toString());return invoke(httpGet);} catch (Exception e) {Log.e(TAG, e.toString());}return null;}public static String invokeGet(String action) {return invokeGet(action, null);}private static String invoke(HttpUriRequest request)throws ClientProtocolException, IOException {String result = null;DefaultHttpClient httpClient = new DefaultHttpClient();// restore cookieif (sCookieStore != null) {httpClient.setCookieStore(sCookieStore);}HttpResponse response = httpClient.execute(request);StringBuilder builder = new StringBuilder();BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));for (String s = reader.readLine(); s != null; s = reader.readLine()) {builder.append(s);}result = builder.toString();Log.d(TAG, "result is ( " + result + " )");// store cookiesCookieStore = ((AbstractHttpClient) httpClient).getCookieStore();return result;} }
需要注意的是,调试过程中,需要先将web API宿主到IIS,并且IIS需要将form身份验证打开。
Android request asp.net web API by Cooki相关推荐
- android 调用 asp.net web api,从 .NET 客户端调用 Web API (C#)
从 .NET 客户端调用 Web API (C#) 11/24/2017 本文内容 此内容适用于以前版本的 .NET. 新开发应该使用 ASP.NET Core. 有关使用 Core Web API ...
- (四)Asp.net web api中的坑-【api的返回值】
(四)Asp.net web api中的坑-[api的返回值] 原文:(四)Asp.net web api中的坑-[api的返回值] void无返回值 IHttpActionResult HttpRe ...
- ASP.NET Web API 路由对象介绍
前言 在ASP.NET.ASP.NET MVC和ASP.NET Web API这些框架中都会发现有路由的身影,它们的原理都差不多,只不过在不同的环境下作了一些微小的修改,这也是根据每个框架的特性来制定 ...
- A simple Test Client built on top of ASP.NET Web API Help Page
Step 1: Install the Test Client package Install the WebApiTestClient package from the NuGet Package ...
- ASP.NET Web API Selfhost宿主环境中管道、路由
ASP.NET Web API Selfhost宿主环境中管道.路由 前言 前面的几个篇幅对Web API中的路由和管道进行了简单的介绍并没有详细的去说明一些什么,然而ASP.NET Web API这 ...
- ASP.NET Web API Model-ModelBinder
ASP.NET Web API Model-ModelBinder 前言 本篇中会为大家介绍在ASP.NET Web API中ModelBinder的绑定原理以及涉及到的一些对象模型,还有简单的Mod ...
- 【ASP.NET Web API教程】2.3.3 创建Admin控制器
原文:[ASP.NET Web API教程]2.3.3 创建Admin控制器 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容. Part 3 ...
- [转]Supporting OData Query Options in ASP.NET Web API 2
本文转自:https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/suppor ...
- 通过微软的cors类库,让ASP.NET Web API 支持 CORS
前言:因为公司项目需要搭建一个Web API 的后端,用来传输一些数据以及文件,之前有听过Web API的相关说明,但是真正实现的时候,感觉还是需要挺多知识的,正好今天有空,整理一下这周关于解决COR ...
最新文章
- Python编程入门到实践 - 笔记( 4 章)
- SpringBoot中自定义Banner(启动图案)
- html的head中的常见元素
- 如何启用 SAP Spartacus Guest checkout
- Java编程思想学习(一) 一切都是对象
- MonoRail学习笔记十八:在VM中可以使用哪些系统变量
- 己所不欲,勿施于人的意思,这句话出自哪里?
- 服务器内存傲腾基本参数信息,服务器装傲腾内存
- java xssf 字体样式_Apache POI字体/Fonts
- php如何实现运算符重载,JS怎样实现运算符重载
- 在html中函数无效,无法在按钮点击HTML中调用JavaScript函数
- 计算机屏显内容超过屏幕了,电脑屏幕超出工作频率范围修复方法
- キュリオ / 库利欧
- 智商黑洞(门萨Mensa测试)9
- HCIP-DATACOM H12-831(1-20)
- 以匠心正道,以决心致远:毫末智行的自动驾驶之路
- 转载:不可不知的端午习俗
- 情境领导者-第六章、产生胜利者 故事
- 超融合里的服务器怎么复制文件,整整齐齐的超融合机柜,美好!
- 2020春多元统计分析及R语言建模习题