让ASP.NET Web API默认返回JSON格式

最近重构一些项目里的代码,有一项就是把之前写在MVC的controller里的api方法挪到Web Api controller里,发现ASP.NET Web API的controller默认的返回数据格式是XML格式,搜了一下,要改成返回JSON格式只需要在WebApiConfig.cs文件里的Register方法末尾加上下面几行代码即可

var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);

ASP.NET MVC网站集成支付宝

阿里官方的支付宝实时到账的代码示例里DotNet平台(C#语言)只有ASP.NET(WebForm)版本的,没有ASP.NET MVC版本的。于是就撸了这个ASP.NET MVC的版本丢GitHub上了,地址是https://github.com/blrchen/AlipayIntegrationMVC,欢迎有爱的童鞋fork。

一些注意事项

  1. 调试前请先在保证AlipayConfig.cs和PaymentController.cs的SubmitAlipay方法里的配置参数均已经更新成正确的参数。
  2. 调试需要用服务器调试,不要用localhost调试,要用申请账号的域名调试。
  3. 关于return_url和notify_url的说明:
    • return_url是支付完毕后,从支付宝跳转回来的页面,可以理解为是一个同步的接口,只返回一次,商家支付完毕后的业务逻辑主要在这个页面实现。这个页面可以通过http get方法直接取得交易结果的相关详细信息,比如商户订单号,支付宝交易号,交易状态等等。
    • notifiy_url是个异步通知的接口页面,支付宝会在48小时内将支付结果主动post到这个页面,如果失败则会多次尝试,直到成功为止。这个接口的主要作用是减少了订单支付信息不完整(比如用户支付完毕但是没能成功的返回商家网站)情况的出现,从而避免了因为没有支付信息需要人工完成的订单对账工作。
    • 不要假设return_url会先于notify_url发生,支付宝不保证这2个的先后顺序,所以在return_url的时候也要判断交易是否已经处理过。

把jQuery UI的CSS加到ASP.NET MVC项目的bundle中

在ASP.NET MVC项目中,通过NuGet把jQuery UI加入工程后调试页面,会发现这些jQuery UI的控件的样式都不对。这主要是因为最新的MVC里默认启用了一个bundle的功能,这个功能会把javascript和css等文件分组,压缩打包,从而实现网站的性能优化。NuGet不会自动把jQuery UI的css文件加到bundle里,所以需要手工添加以下,才能让jQuery UI的控件在页面上显示正常。

具体的步骤是 Continue reading 把jQuery UI的CSS加到ASP.NET MVC项目的bundle中

[C#]HttpContext在ASP.NET MVC Controller里为null的解决方法

在MVC的controller里默认是访问不到HttpContext的,如果直接调用HttpContext,你会发现这个对象总是空的。

下面是一个解决方法可以在Controller里取得当前请求的HttpContext,最好是放在一个基类里这样所有的controller都可以继承。 Continue reading [C#]HttpContext在ASP.NET MVC Controller里为null的解决方法

CS0103: The name ‘Scripts’ does not exist in the current context解决方法

更新:这个bug在ASP.NET MVC 4正式版已经没有了。

今天试玩VS2012里的ASP.NET MVC4,用Controller里用Entity Framework生成模版后,发现页面报错CS0103: The name ‘Scripts’ does not exist in the current context。 Continue reading CS0103: The name ‘Scripts’ does not exist in the current context解决方法