标签: asp.net-web-api

区分HTTP请求和Ajax请求

我目前正在研究ASP.NET WebApi和Angularjs

WebApi有一个方法

 [System.Web.Http.AcceptVerbs("POST")]
        [System.Web.Http.HttpPost]
        public HttpResponseMessage SearchAddress(SearchDetails searchDetail)
        {
            //13.03993,80.231867
            try
            {
                if (!WebSecurity.IsAuthenticated)
                {
                    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.NotAcceptable);
                    return response;
                }
                List<CollegeAddress> CollegeAddress = addressService.GetAddressFromDistance(17.380498, 78.4864948, 2000);
                HttpResponseMessage responseData = Request.CreateResponse(HttpStatusCode.Accepted, CollegeAddress);
                return responseData;
            }
            catch (Exception e)
            {
                HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.NotFound);
                return response;
            }
        }
Run Code Online (Sandbox Code Playgroud)

我必须从客户端调用此方法.

当我使用调用此方法时Ajax,它不起作用,searchDetail如果我使用Ajax ,则method参数始终为null.

$.ajax({
            method: 'POST',
            url: rootUrl + '/api/Address/SearchAddress',
            async: false,
            data: searchDetail,
            type: "json",
            headers: {
                'Content-Type': "application/json; charset=utf-8"
            }
        }).success(function (response) …
Run Code Online (Sandbox Code Playgroud)

javascript ajax http asp.net-web-api angularjs

1
推荐指数
1
解决办法
4432
查看次数

动作委托c#转换为vb.net

我有问题将此转换为vb.net

C#

Global.asax中

protected void Application_BeginRequest()
{
    GlobalConfiguration.Configure(WebApiConfig.Register);
}

public static void Register(HttpConfiguration config)
{                       
    config.Routes.Clear();            
}
Run Code Online (Sandbox Code Playgroud)

vb.net

Protected Sub Application_BeginRequest()
    GlobalConfiguration.Configure(WebApiConfig.Register)          
End Sub

Shared Function Register() As Action(Of HttpConfiguration)

End Function
Run Code Online (Sandbox Code Playgroud)

我在注册方法的vb.net版本中遇到问题.如何在c#中访问HttpConfiguration的参数.

vb.net delegates asp.net-web-api

1
推荐指数
1
解决办法
1047
查看次数

Web API响应时间

我正在构建一个服务器监视系统,并希望向Web API发送请求并在JSON对象中获取服务器的运行状况,如果没有问题,数据库连接是否正常,响应时间等等.

如何实现响应时间,说明Web API响应请求需要多长时间?

c# asp.net-web-api

1
推荐指数
1
解决办法
5068
查看次数

ASP.net web api 2错误"参数字典包含参数的空条目"

我有像这样配置的路由:

   routes.MapHttpRoute("DefaultApi2", "api/{controller}/{action}/{id}", new {id = RouteParameter.Optional}
Run Code Online (Sandbox Code Playgroud)

我的控制器看起来像这样:

  public class RoutineController : ApiController
{
    private readonly RoutineService _routineService;

    public RoutineController(RoutineService routineService)
    {
        _routineService = routineService;
    }



    [HttpGet]
    [ActionName("Tags")]
    public List<RoutineTag> Tags()
    {
        return _routineService.GetAllTags();
    }

    [HttpGet]
    [ActionName("SingleRoutine")]
    // GET api/routine/5
    public RoutineViewModel SingleRoutine(int id)
    {
        return _routineService.GetRoutineById(id);

    }
}
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误:

{"Message":"The request is invalid.","MessageDetail":"The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'Infrastructure.Api.Models.RoutineViewModel Routine(Int32)' in 'Infrastructure.Api.Controllers.RoutineController'. An optional parameter must be a reference …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-web-api asp.net-web-api2

1
推荐指数
1
解决办法
8413
查看次数

是否可以使用多个Http属性来装饰ASP.NET WEB API控制器方法

我想知道是否可以使用多个Http属性来装饰WEB API控制器方法,如下所示,如果可能,这是表达该行为的正确方法吗?
例如:

    [HttpPut]
    [HttpPost]
    public HttpResponseMessage EditRegistration([FromUri] string id, [FromBody] Registration registration)
Run Code Online (Sandbox Code Playgroud)

我试过这个并且管道在两种情况下都正确地解析了请求(PUT和POST请求)但是我想知道这是因为Http属性还是因为WEB API使用了一些其他方式将请求映射到控制器方法.

c# asp.net-web-api

1
推荐指数
1
解决办法
674
查看次数

C#WebAPI垃圾收集

我刚刚将第一个C#WebAPI应用程序交付给第一个客户.在正常负载下,性能最初甚至比我预期的要好.原来.

一切都工作正常,直到某些时候,内存已经启动,垃圾收集开始乱成一团(如"它收集的物品还没有垃圾").那时,有多个W3WP线程,总共有10个ram,每个工人有一个单位数的演出.重新启动IIS后,一切都恢复正常,但当然内存使用率再次上升.

如果我错了,请纠正我,但是

  • C#不应该有自动垃圾回收吗?
  • GC收集WebAPI应用程序的垃圾应该不容易吗?

请帮助我:

  • 如何明确说明GC应该收集什么,从而防止内存泄漏?是someBigList = null;要走的路?
  • 如何检测内存泄漏的位置?

编辑:让我澄清一些事情.

我的.NET WebAPI应用程序主要是一堆

public class MyApiController:ApiController
{
    [HttpGet]
    public MyObjectClass[] MyApi(string someParam) {
        List<MyObjectClass> list = new List<MyObjectClass>();
        ...
        for/while/foreach {
            MyObjectClass obj = new MyObjectClass();
            obj.firstStringAttribute = xyz;
            ...
            list.Add(obj);
        }
        return list.ToArray();
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,GC应该很简单:在"返回"之后,所有局部变量都应该是垃圾.然而,每次调用时,使用的内存都会增加.

我最初认为C#WebAPI程序的行为类似于(预编译)PHP:IIS调用程序,执行它,返回值,然后完全处理掉.

但这种情况并非如此.例如,我发现静态变量在运行之间保持数据,现在我处理了所有静态变量.

因为我发现静态变量是GC的一个问题:

 internal class Helper
 {
     private static List<string> someVar = new List<string>();
     internal Helper() {
         someVar=new List<string>();
     }
     internal void someFunc(string str) {
         someVar.Add(str);
     }
     internal string[] someOtherFunc(string str) …
Run Code Online (Sandbox Code Playgroud)

c# garbage-collection memory-leaks asp.net-web-api

1
推荐指数
1
解决办法
5036
查看次数

没有System.Web.Http的ASP.NET Web API控制器(可插入,解耦架构)

我正在使用ASP.NET Web API创建一个可插拔的项目框架.我有很多胆量已经弄明白但是我对架构的一部分有问题,我不完全确定如何解耦.

作为简化示例,我有以下内容:

  • 服务/表示层(简单的Web API托管项目,在此内部很少,它基本上只是一个处理IIS中的托管或自托管的shell)
  • 域层,包含项目的核心,域层部分
  • 服务(N个服务,每个服务都引用了Domain层:思考微服务).目前,这些服务中的每一个都引用了ASP.NET Web API 2.1

现在,服务都引用了Domain层,因为它有接口,帮助器等.但是,Domain层也引用了ASP.NET Web API 2.1等内容.我的想法是在域中有一个基础"BaseController",每个服务的控制器都可以从中继承,反过来都必然会继承像Get(),Post()等有线的东西.问题是我不希望每个服务都必须引用ASP.NET Web API 2.1和其他依赖项.我希望他们能够通过抽象来使用它们而不直接引用它们.换句话说,我想要更宽松的耦合,并希望服务能够自主地生活并独立于System.Web.Http.随着项目的发展,它将帮助我实施单元测试和SOLID原则.

也许我在这里采取了错误的方法,但也许不是.我的主要目标是使用ASP.NET Web API创建一个可插入的微服务框架,每个微服务都作为一个独立的程序集.所以,如果有另一种推荐方法,我会全力以赴.

希望这是有道理的.有什么指针吗?对于它的价值,我对设计模式和SOLID原则的概念非常熟悉; 只是不确定如何将这一切串在一起,同时保持控制器本身提供的一些自动请求处理.

谢谢!

.net architecture asp.net design-patterns asp.net-web-api

1
推荐指数
1
解决办法
1383
查看次数

如何处理WebAPI上的路由冲突 - 字符串ID与action + id

我正在使用.NET 4上的Web API(nuget上的WebAPI版本4.0.30506)托管REST API.为了允许更精细的属性路由,我还在我的解决方案中包含了attributerouting.net.

我有2个冲突的属性路由.冲突的原因是我们在一次调用中通过字符串标识符查询,并在另一次调用中通过字符串操作+数字标识符进行查询.HTTP响应中抛出的消息读取Multiple actions were found that match the request.以下是演示这两者的示例查询:

1) http://example/api/libraries/?libraryId=some_library (some_library is a string identifier)

2) http://example/api/libraries/bookStatus/1 (1 is the library database ID) 
Run Code Online (Sandbox Code Playgroud)

我一直在努力通过不同的方式来完成这项工作.我当前的控制器签名如下所示:

[GET("api/libraries/?libraryId={libraryId}", Precedence = 2)]
[System.Web.Http.HttpGet]
public Library QueryLibraryByLibraryId(string libraryId){}

[GET("api/libraries/bookStatus/{libraryId:long}", Precedence = 1)]
[System.Web.Http.HttpGet]
public Dictionary<string, Dictionary<string, string>> QueryBookStatus(long libraryId){}
Run Code Online (Sandbox Code Playgroud)

我可以看到为什么路由可能会混淆:它如何知道字符串标识符"bookStatus/1"无效是一个很好的问题.但是,我认为这应该更容易定义一些约束.

如何在保持此类签名结构的同时解决这些冲突?

.net c# asp.net-web-api attributerouting

1
推荐指数
1
解决办法
5190
查看次数

如何在.Net控制台应用程序中获取承载令牌?

我正在按照教程讲解如何授权和从Web-api服务器获取承载令牌。通过fiddler在那里执行的任务非常简单,但是,当我尝试从控制台应用程序执行相同操作时,请求失败,并显示400 Bad Request Error。这是向服务器发出请求的代码:

var request = WebRequest.Create("http://localhost:12698/token") as HttpWebRequest;
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
    request.CookieContainer = new CookieContainer();         
    var authCredentials = "userName=" + user + "&password=" + password;
    byte[] bytes = System.Text.Encoding.UTF8.GetBytes(authCredentials);
    request.ContentLength = bytes.Length;
    using (var requestStream = request.GetRequestStream()){
        requestStream.Write(bytes, 0, bytes.Length);
    }

    using (var response = request.GetResponse() as HttpWebResponse){
        authCookie = response.Cookies["access_token"];
    }
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我确定我在做什么错吗?还是我应该使用其他方法来获取身份验证令牌?

c# asp.net-mvc authorization asp.net-web-api

1
推荐指数
1
解决办法
9576
查看次数

如何在UML中将Business层映射到Model对象?

刚开始Star UML绘制一个class diagram.

与任何应用程序一样,MyBLL(业务层)Model在与DAO(数据库层)交互之后创建一个实例.

或多或少,简化(为清晰起见)类图如下所示:

在此输入图像描述

很明显,BLL完成后将不再使用模型类.

  1. 我应该在这里使用什么?aggregationcomposition映射MyBLLMyModel.

  2. 我使用了一个composition从关系MyBLLMyDAO.我的逻辑是在BLL图层存在之后,MyDAO将不再存在,因为它被引用MyBLL.它是否正确?

注意:这是WebAPI我使用C#创建的项目.

.net c# uml staruml asp.net-web-api

1
推荐指数
1
解决办法
284
查看次数