WebClient Post数据到Nopcommerce(post数据到MVC5)

注意事项

1.把[ValidateAntiForgeryToken]注释掉,以后再处理CSRF攻击.现在学习先不理

2.post的数据,必须和MVC上面接收的参数字段进行对应,否则post不到函数,就报500错误.

本来想写详细,可是现在不懂写啥了,直接贴代码,不懂就留言问哦.

代码没重构,有空再重构漂亮点.将就看下吧.

using System;
using System.Collections.Specialized;
using System.Net;
using System.Text;
using Android.App;
using Android.OS;
using Android.Widget;
using Nop.DomainPCL.Models.Customer; namespace Nop.MonoAndroid.Controllers
{
[Activity(Label = "注册页")]
public class RegisterActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
if (Build.VERSION.SdkInt.GetHashCode() >= 11)//处理网络线程的异常
{
StrictMode.SetThreadPolicy(
new StrictMode.ThreadPolicy.Builder().DetectDiskReads()
.DetectDiskWrites()
.DetectNetwork()
.PenaltyLog()
.Build());
StrictMode.SetVmPolicy(
new StrictMode.VmPolicy.Builder().DetectLeakedSqlLiteObjects()
.DetectLeakedClosableObjects()
.PenaltyLog()
.PenaltyDeath()
.Build());
}
SetContentView(Resource.Layout.RegisterLayout); // Create your application here
var txtEmail = FindViewById<EditText>(Resource.Id.txtEmail);
var txtPass = FindViewById<EditText>(Resource.Id.txtPassword);
var txtRePass = FindViewById<EditText>(Resource.Id.txtConfirmPassword);
var txtFName = FindViewById<EditText>(Resource.Id.txtFirstName);
var txtLName = FindViewById<EditText>(Resource.Id.txtLastName); var btOk = FindViewById<Button>(Resource.Id.btnOK);
btOk.Click += delegate
{
var registInfo = new RegisterModel();
registInfo.Email = txtEmail.Text;
registInfo.Password = txtPass.Text;
registInfo.ConfirmPassword = txtRePass.Text;
registInfo.FirstName = txtFName.Text;
registInfo.LastName = txtLName.Text;
// System.Json.JsonObject postData = new System.Json.JsonObject()
// {
// {"Email",registInfo.Email},{"Password",registInfo.Password},{"ConfirmPassword",registInfo.ConfirmPassword},{"FirstName",registInfo.FirstName},{"LastName",registInfo.LastName}
//
// };
// postData.Add("returnUrl", "");
// postData.Add("captchaValid", "false");
// string postStr = postData.ToString();
const string url = "http://192.168.0.4:8002/register";
using (var client = new WebClient())
{
try
{
//PostToMvc1(client, url);
PostToMvc2(registInfo, url, client);
}
catch (WebException)
{
throw;
}
}
};
} private static void PostToMvc2(RegisterModel registInfo, string url, WebClient client)
{
var form = new NameValueCollection();
form.Add("Email", registInfo.Email);
form.Add("Password", registInfo.Password);
form.Add("ConfirmPassword", registInfo.Password);
form.Add("FirstName", registInfo.FirstName);
form.Add("LastName", registInfo.LastName);
form.Add("LastName", registInfo.LastName);
form.Add("returnUrl", "");
form.Add("captchaValid", "false");
client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
//采取POST方式必须加的header,如果改为GET方式的话就去掉这句话即可
client.Headers.Add("ContentLength", form.ToString().Length.ToString());
client.Headers.Add("Accept-Language: zh-cn");
client.Headers.Add("Referer", "http://192.168.0.4:8002/register");
Byte[] responseData = client.UploadValues(url, "POST", form); //得到返回字符流
string srcString = Encoding.UTF8.GetString(responseData); //解码
} public void PostToMvc1(WebClient client, string url)
{
string postString =
"FirstName=stupro3&LastName=23fe&DateOfBirthDay=0&DateOfBirthMonth=0&DateOfBirthYear=0&Email=stupro6@qq.com&Company=&Newsletter=true&Newsletter=false&Password=123456&ConfirmPassword=123456&register-button=%E6%B3%A8%E5%86%8C&returnUrl=null&captchaValid=false";
//这里即为传递的参数,可以用工具抓包分析,也可以自己分析,主要是form里面每一个name都要加进来
byte[] postData = Encoding.UTF8.GetBytes(postString); //编码,尤其是汉字,事先要看下抓取网页的编码方式
client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
//采取POST方式必须加的header,如果改为GET方式的话就去掉这句话即可
client.Headers.Add("ContentLength", postData.Length.ToString());
client.Headers.Add("Accept-Language: zh-cn");
client.Headers.Add("Referer", "http://192.168.0.4:8002/register");
byte[] responseData = client.UploadData(url, "POST", postData); //得到返回字符流
string srcString = Encoding.UTF8.GetString(responseData); //解码
}
}
}
 

mono for android代码记录1 WebClient Post数据到Nopcommerce(post数据到MVC5)的更多相关文章

  1. mono for android 学习记录

    C#开发Android应用实战(全 扫描 中文版) 学习记录: 拖完控件后,不要急着按F5,需要重新生成,才能自动修改 Resource.Designer.cs 文件 1. Activity 是基于a ...

  2. Android代码混淆及项目发布方法记录

     Android代码混淆及项目发布步骤记录 本来整理了一份Android项目混淆与发布的文档,突然想到何不写篇博客,分享一下呢,如是便有了本文. Android代码混淆及项目发布步骤记录 一.清理 ...

  3. Android(4)—Mono For Android 第一个App应用程序

    0.前言 年前就计划着写这篇博客,总结一下自己做的第一个App,却一直被新项目所累,今天抽空把它写完,记录并回顾一下相关知识点,也为刚学习Mono的同学提供佐证->C#也是开发Android的! ...

  4. Mono for Android开发调研笔记

    安装完Mono for Android(简称:MonoDroid)之后,可以用MonoDevelop或Visual Studio来开发Mono for Android应用程序:目前只能在模拟器上调试和 ...

  5. mono for android学习过程系列教程(1)

    直接进入主题,关于mono for android的学习,首先配置好环境,如何配置环境,度娘谷歌一大堆,记得使用破解版. 我自己是百度“黑马四期”传智播客的视频,里面有破解版开发环境的软件. 今天直接 ...

  6. mono for android中使用dapper或petapoco对sqlite进行数据操作

    在mono for android中使用dapper或petapoco,很简单,新建android 类库项目,直接把原来的文件复制过来,对Connection连接报错部分进行注释和修改就可以运行了.( ...

  7. Mono for Android 优势与劣势

    原文:Mono for Android 优势与劣势 最近有兴趣了解一下Mono for Andriod,也就是使用.NET平台来开发Andriod程序.Mono for Android API 几乎映 ...

  8. (转)Mono for Android 优势与劣势

    最近有兴趣了解一下Mono for Andriod,也就是使用.NET平台来开发Andriod程序.Mono for Android API 几乎映射标准的Andriod API.例如,两边API几乎 ...

  9. 【月入41万】Mono For Android中使用百度地图SDK

    借助于Mono For Android技术,.Net开发者也可以使用自己熟悉的C#语言以及.Net来开发Android应用.由于Mono For Android把Android SDK中绝大部分类库都 ...

随机推荐

  1. eclipse配置javacv0.8

    之前配置了一次javacv,但是忘了做笔记,这次又重新查了一遍资料,很多东西模棱两可,浪费了很多时间,这次配置成功,总结如下,希望能帮到大家. 如不明确,可以联系我.   javacv下载 https ...

  2. ASP.NET MVC 5 一 入门

    本系类教程将要构建ASP.NET MVC 5 Web 应用程序,使用的工具是VS2013 .现在有预览版可以下载了, 点击下载VS2013 FOR WEB ISO文件 .VS2012 还没用几天呢,2 ...

  3. 【转载】Java常量池

    本篇随笔为转载,原贴地址:Java常量池理解与总结. (其实Java的常量池有点像C++中的存储字符串常量的常量存储区). 一.相关概念 什么是常量用final修饰的成员变量表示常量,值一旦给定就无法 ...

  4. PHP 用html方式输出Excel文件时的数据格式设置

    1) 文本:vnd.ms-excel.numberformat:@ 2) 日期:vnd.ms-excel.numberformat:yyyy/mm/dd 3) 数字:vnd.ms-excel.numb ...

  5. MySQL_财务统计各产品品类各城市上周收入毛利表_20161202

    注:财务需要统计各产品品类各城市上周毛利情况 下面这样的表是沟通后展现的形式.数据展现形式我认为的大都是行列转 列转行的转置 从财务角度这样展现形式比较适合. 由于黄色部分为汇总项目,因此我拆分成9个 ...

  6. python类——黑板客老师课程学习

    1.基本语法 class class_name(base_class):  base_class是它继承的父类 class_var def methods(self,args): statements ...

  7. xcode archive 一直是灰色的

    把配置选择为device才能选build and archive的,模拟器的肯定不能build and anchive

  8. bootstrap的日期插件datetimepicker有问题

    bootstrap的日期插件datetimepicker在chrome中会出现掉下来的现象,而且一直没找到原因,下载最新版的插件直接在各个浏览器中都会掉下来, 问题一直解决不了,转而换其他插件 htt ...

  9. CSS3--选择器

    子元素选择器: div>p{background:yellow:} 相邻的后兄弟选择器(必须相邻) h1+p{padding-top:20px:} 后兄弟选择器(同级的当前元素后面的元素) di ...

  10. js关闭浏览器的tab页(兼容)

    由于在脚本中使用了 window.close(), 当前非弹出窗口在最新版本的chrome和firefox里总是不能关闭,而在 IE中是可以关闭的 . 在console中弹出提示"Scrip ...