标签: asp.net-web-api2

将[Authorize]属性隐式应用于所有Web API控制器

我的应用程序设置为必须使用Web API中的授权属性"授权"除登录之外的所有请求.例如

 [Authorize]
 [HttpGet, Route("api/account/profile")]
 public ApplicationUser Profile()
 {
       return userModel;
 }
Run Code Online (Sandbox Code Playgroud)

并且只有登录需要不授权,因为那里你得到令牌;)

[AllowAnonymous]
[HttpPost, Route("api/account/login")]
public async Task<IHttpActionResult> Login(LoginViewModel model)
{
   ....
}
Run Code Online (Sandbox Code Playgroud)

而不是必须将[Authorize]属性添加到我的所有路由,有没有办法全局设置它?

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

26
推荐指数
4
解决办法
2万
查看次数

Web API自托管主机 - 在所有网络接口上绑定

如何在所有网络接口上进行Web API自主绑定?

我目前有以下代码.不幸的是,它仅绑定在localhost上.因此,从localhost以外的地方访问此服务器失败.

var baseAddress = string.Format("http://localhost:9000/"); 
            using (WebApp.Start<Startup> (baseAddress)) 
            {
                Console.WriteLine("Server started");
                Thread.Sleep(1000000);
            }
Run Code Online (Sandbox Code Playgroud)

c# asp.net self-hosting asp.net-web-api2

26
推荐指数
2
解决办法
1万
查看次数

如何向ASP.NET WebAPI控制器添加自定义方法?

ASP.NET MVC WebAPI项目中,我们默认创建了以下控制器

 public class ValuesController : ApiController
    {
        // GET api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/values/5
        public string Get(int id)
        {
            return "value";
        }

        // POST api/values
        public void Post([FromBody]string value)
        {
        }

        // PUT api/values/5
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE api/values/5
        public void Delete(int id)
        {
        }
}
Run Code Online (Sandbox Code Playgroud)

但是可以在这里添加任何自定义方法,以便它们也可以支持get/post吗?

谢谢!

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

25
推荐指数
3
解决办法
4万
查看次数

依赖注入无法与Owin自托管Web Api 2和Autofac一起使用

我正在寻找Web Api 2,Owin和Autofac,并需要一些指导.

概述
我有一个Owin自托管的Web Api,它使用Autofac进行IoC和依赖注入.该项目是一个控制台应用程序,就像一个服务,这意味着它可以停止和启动.我有一个带有两个构造函数的身份验证控制器:一个参数少,另一个注入存储库.

问题
当我运行服务并调用api时,我的无参数构造函数被调用,我的存储库永远不会被注入(_repository = null).

研究
我做了一些研究,并在Github上发现了一些有用的项目,我将其复制到了发球台,但我错过了很大一部分难题.很有帮助,但没有解决我的问题.我在Stack Overflow上阅读了这个问题,Dane Sparza有一个很好的演示项目,但我找不到一个明确的解决方案.问题不是自托管而是依赖注入.

我的代码(细化了解释)

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        HttpConfiguration config = new HttpConfiguration();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

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

        var connectioninfo = ConnectionInfo.FromAppConfig("mongodb");

        var builder = new ContainerBuilder();                                    // Create the container builder.
        builder.RegisterApiControllers(Assembly.GetExecutingAssembly());         // Register the Web API controllers.
        builder.Register(c => …
Run Code Online (Sandbox Code Playgroud)

c# autofac owin asp.net-web-api2

25
推荐指数
1
解决办法
2万
查看次数

IHttpActionResult vs async Task <IHttpActionResult>

我见过的大多数Web API 2.0方法都返回IHttpActionResult,它被定义为"定义异步创建System.Net.Http.HttpResponseMessage的命令"的接口.

我对有关方法返回时发生的事情感到有些困惑async Task<IHttpActionResult>.

你为什么要用另一个呢?或者这些功能是否相同 - 是不是IHttpActionResult已经异步?

c# asynchronous asp.net-web-api2

25
推荐指数
2
解决办法
2万
查看次数

选项405(方法不允许)web api 2

我创建了一个web api 2,我正在尝试对它进行跨域请求,但是我收到以下错误:

选项http://www.example.com/api/save 405(方法不允许)

我已经浏览了一下这个问题的大多数解决方案是说我需要从NuGet安装COR并启用它所以我已经安装了包并标记了我的控制器

[EnableCors("*", "*", "*")]
Run Code Online (Sandbox Code Playgroud)

但这仍然没有解决问题.

ApiController只有以下Save方法:

[ResponseType(typeof(int))]
public IHttpActionResult Save(Student student)
{
    if (ModelState.IsValid)
    {
        using (StudentHelper helper = new StudentHelper())
        {
            return Ok(helper.SaveStudent(student));
        }
    }
    else
    {
        return BadRequest(ModelState);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我来自不同领域的js:

$.ajax({
    type: "POST",
    crossDomain: true,
    data: JSON.stringify(student),
    crossDomain: true,
    url: 'http://www.example.com/api/save',
    contentType: "application/json",
    success: function (result) {
        console.log(result);
    }
});
Run Code Online (Sandbox Code Playgroud)

我还需要做些什么来实现这个目标吗?

c# asp.net-mvc cors asp.net-web-api2

24
推荐指数
4
解决办法
3万
查看次数

Web Api 2 Post - UrlHelper.Link不得返回null

我有一个基本的Web API 2设置与一些基本的路由.

以下是插入的默认路径和帖子.当我调用帖子时,记录在数据库中完美创建,但"CreatedAtRoute"调用返回500错误,说明:

ExceptionMessage:"UrlHelper.Link不能返回null." ExceptionType:"System.InvalidOperationException"

为什么我会收到此错误?

[RoutePrefix("api/casenotes")]
    public class CasenoteController : ApiController...



// POST api/Casenote
[Route("")]
[ResponseType(typeof(client_admission_casenote))]
    public async Task<IHttpActionResult> Postclient_admission_casenote   (client_admission_casenote client_admission_casenote)
{

  Request.GetRequestContext().IncludeErrorDetail = true;

  if (!ModelState.IsValid)
  {
      return BadRequest(ModelState);
  }

  db.client_admission_casenote.Add(client_admission_casenote);
  await db.SaveChangesAsync();

  return CreatedAtRoute("DefaultApi", new { id = client_admission_casenote.casenote_id }, client_admission_casenote);
    }
Run Code Online (Sandbox Code Playgroud)

asp.net-web-api2

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

Web API可选参数

我有一个带有以下签名的控制器:

[Route("products/filter/{apc=apc}/{xpc=xpc}/{sku=sku}")]
public IHttpActionResult Get(string apc, string xpc, int? sku)
{ ... }
Run Code Online (Sandbox Code Playgroud)

我用以下URI调用此方法:

  • 〜/ API /产品/过滤?APC = AA&XPC = BB
  • 〜/ API /产品/过滤?SKU = 7199123

第一个URI没有问题.第二个有一个奇怪的副作用.即使apc和xpc的默认值在未提供时应为null,但参数实际上是它们的名称.我可以通过添加额外的逻辑来克服这个问题:

apc = (apc == "apc") ? null : apc;
xpc = (xpc == "xpc") ? null : xpc;
Run Code Online (Sandbox Code Playgroud)

这似乎是一个黑客攻击,如果传递的值等于参数名称,则会出现问题.

有没有办法定义路线没有这种副作用?

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

24
推荐指数
3
解决办法
6万
查看次数

WebAPi - 统一来自ApiController和OAuthAuthorizationServerProvider的错误消息格式

在我的WebAPI项目中,我Owin.Security.OAuth用来添加JWT身份验证.GrantResourceOwnerCredentials我的OAuthProvider 内部使用以下行设置错误:

context.SetError("invalid_grant", "Account locked.");
Run Code Online (Sandbox Code Playgroud)

这将返回给客户:

{
  "error": "invalid_grant",
  "error_description": "Account locked."
}
Run Code Online (Sandbox Code Playgroud)

在用户获得身份验证并且他尝试向我的某个控制器执行"正常"请求后,当模型无效时,他会得到以下响应(使用FluentValidation):

{
  "message": "The request is invalid.",
  "modelState": {
    "client.Email": [
      "Email is not valid."
    ],
    "client.Password": [
      "Password is required."
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

这两个请求都在返回400 Bad Request,但有时您必须查找error_description字段,有时候还要查找message

我能够创建自定义响应消息,但这仅适用于我返回的结果.

我的问题是:是否有可能取代messageerror响应由返回ModelValidatorProviders,并在其他地方?

我读过ExceptionFilterAttribute但我不知道这是不是一个好的起点.FluentValidation应该不是问题,因为它只是添加错误ModelState.

编辑:
我正在尝试解决的下一件事是WebApi中返回的数据中的命名约定不一致 - 当OAuthProvider我们返回错误error_details时,但是当我们返回BadRequestModelState(从ApiController)返回错误modelState.正如你可以看到第一次使用snake_case …

c# fluentvalidation asp.net-mvc-4 owin asp.net-web-api2

24
推荐指数
2
解决办法
1564
查看次数

IIS编译错误-2146232576 AspNetInitializationExceptionModule

我有一个相当简单的C#WebAPI2项目,它在本地运行,但在远程机器(Windows Server 2012 R2 Standard)上发布到IIS后,网页显示以下内容(将customErrors设置为"Off"后):

'/'应用程序中的服务器错误.编译错误说明:在编译服务此请求所需的资源期间发生错误.请查看以下特定错误详细信息并相应地修改源代码.编译器错误消息:编译器失败,错误代码为-2146232576.

如果我抓取详细的编译器输出并在IIS服务器上运行它,我会收到一条智能屏幕错误消息:

此应用无法在您的PC上运行.要查找适用于您的PC的版本,请咨询软件发行商.

我猜它与编译器版本有关,但自上次发布以来没有任何变化.

有任何想法吗?

c# iis-8 asp.net-web-api2

24
推荐指数
3
解决办法
2万
查看次数